摘要: SQLSERVER中的自旋锁在SQLSERVER中的锁有很多,例如什么意向共享锁,排他锁,行,页锁 这些都属于LOCK而latch比lock更轻量级,只在内存中存在,一般用来锁住数据页面,防止多人同时修改内存中的一个数据页面而今天介绍的spin lock则比上面两种锁更更轻量级的spin lock介绍:lock和latch以外还有一种更轻量级的同步资源:spin lock(自旋锁),第一次看到spin lock这个名词是在潘爱民老师写的《Windows内核原理与实现》这本书里看到的,估计SQLSERVER也借鉴了Windows操作系统的一些同步技术。在SQLSERVER里,有些spin loc 阅读全文
posted @ 2012-12-15 22:31 桦仔 阅读(1048) 评论(0) 推荐(0) 编辑
摘要: SQLSERVER解决HOT PAGE问题的其中一个思路使用表分区什么叫HOT PAGE?应用程序发来大量的并发语句在修改或者插入同一张表格里的记录,而表格架构设计以及用户业务逻辑使得这些修改跟插入都集中在同一个数据页面,或者数量不多的几个数据页面上。这些页面有时候也被称为 hot page 热点页... 阅读全文
posted @ 2012-12-15 16:53 桦仔 阅读(2336) 评论(1) 推荐(0) 编辑
摘要: SQLSERVER的数据页面结构在论坛里经常有人问到SQLSERVER是怎麽存放基础表数据的,既然不想查MSDN,本人就在这里说一下吧基础表数据都存放在数据页里面,SQLSERVER存储数据都是按照“页”为单位来存放在磁盘的,SQLSERVER从磁盘读写数据也是按照 “页” 为单位 一页一页地读取到内存,所以有时候如果数据不能塞满整个数据页,那么这种情况就叫做:page split 页拆分 或者 “碎片”(详细的在文章结尾会跟大家解释一下因为要先了解SQLSERVR的数据页面结构才能解释清楚),SQLSERVER有时候需要读取两页才能把用户需要找的数据读出来,如果表加了索引的话可以通过重建索引 阅读全文
posted @ 2012-12-09 22:08 桦仔 阅读(3976) 评论(4) 推荐(2) 编辑
摘要: MARS:多个活动结果集MSDN上的解释:SQL Server 2005 在访问数据库引擎的应用程序中引入了对多个活动结果集 (MARS) 的支持。在 SQL Server 的早期版本中,数据库应用程序无法在单个连接上保持多个活动语句。使用 SQL Server 默认结果集时,应用程序必须先处理或取消自某一批处理生成的所有结果集,然后才能执行该连接上的其他任何批处理。SQL Server 2005 引入了新连接属性,支持应用程序在每个连接上拥有多个待定请求,特别是支持每个连接具有多个活动的默认结果集。MARS 通过以下新功能简化了应用程序设计:应用程序可以同时打开多个默认结果集,并且交错读取它 阅读全文
posted @ 2012-12-09 18:11 桦仔 阅读(2732) 评论(0) 推荐(2) 编辑
摘要: SQLSERVER连接池内部机制前言介绍:当应用程序运行的时候,会有一个连接池的管理控件运行在应用程序的进程里,统一管理应用程序和SQLSERVER建立的所有连接,并且维护这些连接一直处于活动状态。当有用户发出一个connection open指令时连接池会在自己维护的连接池中找一个处于空闲状态的连接放回自己管理的连接池里,给这个用户使用。当用户使用完毕后,发出connection close指令,连接池会把这个连接放回自己管理的连接池里,让他重新处于空闲状态,而不是真的从SQL里登出。这样如果下次有用户需要相同连接,就可以重用这个连接,而无须再去做物理连接了。就是说连接池是放在客户端的,是客 阅读全文
posted @ 2012-12-01 19:23 桦仔 阅读(7327) 评论(8) 推荐(4) 编辑
摘要: SQLSERVER数据库经常置疑的原因近段时间经常收到客户的求助电话,说他们的SQLSERVER业务数据库置疑了,因为系统不能使用,所以他们也不能加油正常营业(我们是做加油站IC卡管理系统的)因为我们的系统损坏的话,加油站也不能加油,然后我们使用DBCC CHECKDB命令帮客户修复数据库,客户的数据库一共置疑了两次我们怀疑是不是他们的硬盘有问题,但是因为计算机是我们配给客户的是DELL商用机(2011年购买的),按道理质量应该不错的。后来得知是他们油站停过电。我们大概知道置疑的原因了。我们推测的原因:停电之前有加油数据要插入数据库,因为SQLSERVER我们都是使用默认设置,什么都没有改,就 阅读全文
posted @ 2012-11-28 23:39 桦仔 阅读(5703) 评论(5) 推荐(0) 编辑
摘要: SQLSERVER中的sp_reset_connection存储过程的作用经常有人在论坛提问为什麽在使用SQL Trace的时候会看到大量的sp_reset_connection存储过程的执行究竟sp_reset_connection存储过程有什么用?网上的资料很少下面说一下这个存储过程是干嘛的在介绍之前先说一下连接池和事务和阻塞,因为这个存储过程跟连接池、事务和阻塞有关一般SQL应用都会使用连接池来得到良好的性能。如果有一个连接忘记把事务关闭就退出连接那么这个连接会被交还给连接池但是这时候,事务不会被清理。客户端驱动程序会在这个连接下一次被重用的时候(又有新的用户要建立连接)发一句sp_re 阅读全文
posted @ 2012-11-28 22:29 桦仔 阅读(5185) 评论(0) 推荐(2) 编辑
摘要: 1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public partial class Form2 : DevComponents.DotNetBar.Office2007Form然后窗体里加上一个DONTERBAR的panel,然后设置panel为fill占满整个窗体然后设置panel的CornerType为Rounded,然后窗体就变为圆角的了: panelEx1.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded;2、如果是圆角控件就照葫芦画瓢,把panel放在控件上面,然后设置为fill,再设置panel 阅读全文
posted @ 2012-11-27 09:19 桦仔 阅读(1633) 评论(2) 推荐(0) 编辑
摘要: SQLSERVER中的锁资源类型RID KEY PAG EXT TAB DB FIL 在检测死锁的时候,会用到sp_lock这个存储过程,里面有一列:type 即锁的资源类型 通俗来讲就是SQLSERVER可以在哪些资源上加锁 可以加锁的资源有RID KEY PAG EXT TAB DB FIL , 阅读全文
posted @ 2012-11-26 22:54 桦仔 阅读(2469) 评论(0) 推荐(0) 编辑
摘要: 要影响SQLSERVER锁的申请和释放行为要考虑的因素1、事务隔离级别的选定事务隔离级别越高,隔离度就越高,并发度也就越差。如果选择了比较高的隔离级别,SQL不可避免地要申请更多的锁,持有的时间也会增加。所以在设计应用的时候,一定要和用户谈好,尽量选择默认的隔离级别(read committed)2、事务的长短和事务的复杂度事务的长度和复杂度决定论这个事务在SQL内部会持续多长时间,也能决定SQL会同时在多少张表和索引上申请和持有锁。事务越简单,就越不容易发生阻塞和死锁。所以这也必须和用户商量好,尽量避免在一个事务里做很多事情3、从应用整体并发度考虑,单个事务一次处理的数据量不能过多应用的性能 阅读全文
posted @ 2012-11-25 11:57 桦仔 阅读(1032) 评论(0) 推荐(0) 编辑