加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLSERVER数据库死锁与优化杂谈

发布时间:2020-12-12 09:04:31 所属栏目:MsSql教程 来源:网络整理
导读:p style="width: 100%; background: #4169E1; color: #ffffff; height: 50px; font-size: 30px; line-height: 50px;"死锁杂谈 当数据库死锁时,SqlServer会释放一个优先级较低的锁,让另一个事务运行;所以,即时去捕捉数据库死锁,是挺不容易的。 如果,数
</tr>
<tr>
<td>BUFFER_POOL_GROW</td>
<td>Used for internal buffer manager synchronization during buffer pool grow operations.</td>

</tr>
<tr>
<td>DATABASE_CHECKPOINT</td>
<td>Used to serialize checkpoints within a database.</td>

</tr>
<tr>
<td>CLR_PROCEDURE_HASHTABLE</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>CLR_UDX_STORE</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>CLR_DATAT_ACCESS</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>CLR_XVAR_PROXY_LIST</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>DBCC_CHECK_AGGREGATE</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>DBCC_CHECK_RESULTSET</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>DBCC_CHECK_TABLE</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>DBCC_CHECK_TABLE_INIT</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>DBCC_CHECK_TRACE_LIST</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>DBCC_FILE_CHECK_OBJECT</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>DBCC_PERF</td>
<td>Used to synchronize internal performance monitor counters.</td>

</tr>
<tr>
<td>DBCC_PFS_STATUS</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>DBCC_OBJECT_METADATA</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>DBCC_HASH_DLL</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>EVENTING_CACHE</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>FCB</td>
<td>Used to synchronize access to the file control block.</td>

</tr>
<tr>
<td>FCB_REPLICA</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>FGCB_ALLOC</td>
<td>Use to synchronize access to round robin allocation information within a filegroup.</td>

</tr>
<tr>
<td>FGCB_ADD_REMOVE</td>
<td>Use to synchronize access to filegroups for add,drop,grow,and shrink file operations.</td>

</tr>
<tr>
<td>FILEGROUP_MANAGER</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>FILE_MANAGER</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>FILESTREAM_FCB</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>FILESTREAM_FILE_MANAGER</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>FILESTREAM_GHOST_FILES</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>FILESTREAM_DFS_ROOT</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>LOG_MANAGER</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>FULLTEXT_DOCUMENT_ID</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>FULLTEXT_DOCUMENT_ID_TRANSACTION</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>FULLTEXT_DOCUMENT_ID_NOTIFY</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>FULLTEXT_LOGS</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>FULLTEXT_CRAWL_LOG</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>FULLTEXT_ADMIN</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>FULLTEXT_AMDIN_COMMAND_CACHE</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>FULLTEXT_LANGUAGE_TABLE</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>FULLTEXT_CRAWL_DM_LIST</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>FULLTEXT_CRAWL_CATALOG</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>FULLTEXT_FILE_MANAGER</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>DATABASE_MIRRORING_REDO</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>DATABASE_MIRRORING_SERVER</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>DATABASE_MIRRORING_CONNECTION</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>DATABASE_MIRRORING_STREAM</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>QUERY_OPTIMIZER_VD_MANAGER</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>QUERY_OPTIMIZER_ID_MANAGER</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>QUERY_OPTIMIZER_VIEW_REP</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>RECOVERY_BAD_PAGE_TABLE</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>RECOVERY_MANAGER</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>SECURITY_OPERATION_RULE_TABLE</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>SECURITY_OBJPERM_CACHE</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>SECURITY_CRYPTO</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>SECURITY_KEY_RING</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>SECURITY_KEY_LIST</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>SERVICE_BROKER_CONNECTION_RECEIVE</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>SERVICE_BROKER_TRANSMISSION</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>SERVICE_BROKER_TRANSMISSION_UPDATE</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>SERVICE_BROKER_TRANSMISSION_STATE</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>SERVICE_BROKER_TRANSMISSION_ERRORS</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>SSBXmitWork</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>SERVICE_BROKER_MESSAGE_TRANSMISSION</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>SERVICE_BROKER_MAP_MANAGER</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>SERVICE_BROKER_HOST_NAME</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>SERVICE_BROKER_READ_CACHE</td>
<td>Internal use only.</td>

</tr>
<tr data-find="_2">
<td>SERVICE_BROKER_WAITFOR_MANAGER</td>
<td data-find="_1">Used to synchronize an instance level map of waiter queues. One queue exists per database ID,Database Version,and Queue ID tuple. Contention on latches of this class can occur when many connections are: In a WAITFOR(RECEIVE) wait state; calling WAITFOR(RECEIVE); exceeding the WAITFOR timeout; receiving a message; committing or rolling back the transaction that contains the WAITFOR(RECEIVE); You can reduce the contention by reducing the number of threads in a WAITFOR(RECEIVE) wait state.</td>

</tr>
<tr>
<td>SERVICE_BROKER_WAITFOR_TRANSACTION_DATA</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>SERVICE_BROKER_TRANSMISSION_TRANSACTION_DATA</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>SERVICE_BROKER_TRANSPORT</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>SERVICE_BROKER_MIRROR_ROUTE</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>TRACE_ID</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>TRACE_AUDIT_ID</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>TRACE</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>TRACE_CONTROLLER</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>TRACE_EVENT_QUEUE</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>TRANSACTION_DISTRIBUTED_MARK</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>TRANSACTION_OUTCOME</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>NESTING_TRANSACTION_READONLY</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>NESTING_TRANSACTION_FULL</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>MSQL_TRANSACTION_MANAGER</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>DATABASE_AUTONAME_MANAGER</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>UTILITY_DYNAMIC_VECTOR</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>UTILITY_SPARSE_BITMAP</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>UTILITY_DATABASE_DROP</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>UTILITY_DYNAMIC_MANAGER_VIEW</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>UTILITY_DEBUG_FILESTREAM</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>UTILITY_LOCK_INFORMATION</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>VERSIONING_TRANSACTION</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>VERSIONING_TRANSACTION_LIST</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>VERSIONING_TRANSACTION_CHAIN</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>VERSIONING_STATE</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>VERSIONING_STATE_CHANGE</td>
<td>Internal use only.</td>

</tr>
<tr>
<td>KTM_VIRTUAL_CLOCK</td>
<td>Internal use only.</td>

</tr>

维护:对数据库、索引或文件组进行维护的任务。

杂项:杂项任务,如启用跟踪标志或从内存中删除 DLL。

信息:收集并显示各种类型信息的任务。

验证:对数据库、表、索引、目录、文件组或数据库页的分配进行的验证操作。

DBCC shrinkdatabase

DBCC shrinkdatabase用于收缩数据库,SQL语句如下:

?执行结果如下:

?

各字段含义如下:

DbId:数据库引擎试图收缩的文件的数据库标识号。

FileId:数据库引擎尝试收缩的文件的文件标识号。

CurrentSize:文件当前占用的 8 KB 页数。

MinimumSize:文件最低可以占用的 8 KB 页数。 这与文件的最小大小或最初创建时的大小相对应。

UsedPages:文件当前使用的 8 KB 页数。

EstimatedPages:数据库引擎估计文件能够收缩到的 8 KB 页数。

如果收缩不成功,可以查看下数据库是否有可以收缩的空间。

SQL如下:

如果有空间还收缩不成功,则可能是别原因。

DBCC参考网址:

SqlServer数据库日志对执行的SQL语句进行了加密,所以,在日志里,我们看不到真正执行的SQL语句。

如果想查看SQL语句,需要借助一些工具,如ApexSQLLog。

不过,虽然看不到SQL语句,也可以通过日志看出一些数据库问题,比如,可以查看数据库执行了多少次插入,更新等操作。

查看数据库日志的SQL如下:

查询结果如下:

Operation

Context

而这个BitMap在数据库第7页:

DCM页 差异变更(Differential Changed Map,DCM)页面他跟踪一个文件中的哪一个区在最新一次完整数据库备份之后被修改过。SQLSERVER用在增量备份时只对已发生数据变更的分区进行增量备份即可

注:此文章为原创,欢迎转载,请在文章页面明显位置给出此文链接!若您觉得这篇文章还不错,请点击下右下角的推荐】,非常感谢!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

<p style="width: 100%; background: #4169E1; color: #ffffff; height: 50px; font-size: 30px; line-height: 50px;">死锁杂谈

当数据库死锁时,SqlServer会释放一个优先级较低的锁,让另一个事务运行;所以,即时去捕捉数据库死锁,是挺不容易的。

如果,数据库死锁比较长时间,那么死锁是可以被捕捉的。

可以用SqlServer活动监视器来查看,哪些进程锁了数据库。

首先打开SqlServer活动监视器,然后可以看到,界面里有进程,查看资源,数据文件I/O,最近消耗大量资源的查询四项。

四项显示内容如下:

进程:在进程里可以看到哪些进程被阻塞,查看属性【阻塞者】可以看到,【阻塞者】的会话ID。

等待资源:等待资源里有一些锁,可以看看那些锁累计等待时间较多。

数据文件I/O:数据文件I/O记录一些数据库MDF,LDF的读写速度。

最近消耗大量资源的查询:记录一些消耗资源较大的SQL查询。

查询进程里被死锁的会话ID,然后执行下面的SQL,进行解锁。

也可以用下面SQL语句查询死锁进程,这样查询死锁进程,定位比较快。

最近消耗大量资源的查询也可以用SQL查询。

下面SQL是查询最耗时的前10条SQL语句。

在SqlServer活动监视器里,查看资源等待。

通常可以看到等待类别是Latch的排在最上面,如下图:

Latch 【闩锁】虽然是一种轻量级的锁,但等待的锁越多,肯定越影响数据库性能。

执行下面SQL,查看下哪些Latch比较耗资源。

查询结果如下图所示:

从结果中可以看到各种锁类型的请求的次数,等待时间,最大等待时间(毫秒)。

但这些锁类型都是英文简写,需要使用下面表格查询它们的真实意义。

通过对比表格,我们发现了最消耗资源的ACCESS_METHODS_DATASET_PARENT锁的意义是并发操作时资源访问的锁。那么想降低并发操作,就可以减少ACCESS_METHODS_DATASET_PARENT锁的资源消耗了。

Latch参考网址:

Description
    推荐文章
      热点阅读