作好平常巡检是数据库管理和维护的重要步骤,并且须要对每次巡检日期、结果进行登记,同时可能须要出一份巡检报告。数据库
本系列旨在解决一些常见的困扰:服务器
前面两篇对服务器软硬件配置、数据库概况进行了巡检,下面咱们要对数据库的一些结构设计进行检查,这些检查主要针对系统开发初期一些不优化的结构设计或在系统不断有新功能增长或运维变更而产生的结构变化。并发
在【检查项】-【所有】中查看每一个数据库的信息,当数据库结构未经过常规检查,平台会提示出警告。app
注:检查信息主要包含不规范的表、缺失索引、无索引外键、没有使用的索引、重复索引、老化的索引。运维
在【数据库】-【不规范的表】中检查系统中表是否存在有不规范设计。这些不规范设计主要包含无汇集索引,使用旧数据类型,汇集索引的列是随机增加的(GUID,uniqueidentifier类型)数据库设计
注:ide
1.微软建议在表中都建议有汇集索引。汇集索引除了能够提升查询性能以外,还能够按需从新生成或从新组织来控制表碎片。高并发
2.在 Microsoft SQL Server 的将来版本中将删除 ntext、text 和 image 数据类型。 请避免在新开发工做中使用这些数据类型,并考虑修改当前使用这些数据类型的应用程序。 请改用 nvarchar(max)、varchar(max) 和 varbinary(max)。性能
3.汇集索引自己是要排序的,而GUID(uniqueidentifier类型)这样插入数据时致使过多的页拆分。优化
(图略)
数据库设计中索引是性能的一大关键,当数据库缺失大量索引,那么也必然致使数据库的性能不好。
(图略)
对主表数据操做时(如删除),须要到外键表中查找校验,若是缺乏外键索引可能致使全表扫描,严重影响性能。
当在查询中组合相关表中的数据时,常常在联接条件中使用外键列,方法是将一个表的 FOREIGN KEY 约束中的列与另外一个表中的主键列或惟一键列匹配。索引使 数据库引擎能够在外键表中快速查找相关数据,提高性能。
(图略)
随着开发和优化的进行,不少人会对数据库进行索引的建立操做,不少时候建立了一个较优的联合索引或者覆盖索引,会让本来单列的索引失去使用的场景,这部分索引会出如今,长时间未使用的索引中,建议删除。
(图略)
随着开发和优化的进行,不少人会对数据库进行索引的建立操做,那么页不免会产生一些功能相近或相同的索引,索引自己也是有维护成本,在更新、插入、删除时会有必定的开销,那么重复的索引只会增长这部分维护开销。
(图略)
索引维护是配置常规维护任务之一,随着数据的不断写入和变动,会产生大量的索引碎片,缺乏维护任务的索引,没法及时从新组织索引数据,致使索引低效,甚至失效。
1.在【检查项】-【结构设计】中查看会话信息和执行计划,当设计结构未经过常规检查,平台会提示出警告。
注:检查信息主要会话隔离级别、是否存在带有事务的长时间会话、执行计划中是否存在隐式转换。
1.在【会话】-【空闲会话】中查看会话信息。
注:主要关注,长时间未关闭会话和长时间未关闭并带有事务的会话。长时间带有事务的会话多是由于程序链接泄露致使,长时间带有事务会阻塞其余会话的正常进行,形成系统卡死等严重性能问题。
2.在【会话】-【概览】页中查看会话详细信息,主要关注事务隔离级别。
事务隔离级别简述:事务隔离级别主要控制查询(共享锁),隔离级别越高并发能力就越差。(详细信息请参见:平台技术资料,最佳配置)
存在隐式转换的执行计划:语句存在隐式转换致使性能消耗,或不能使用索引。
注:隐式转换常发生在表设计的字段类型(varchar)优先级别低于程序传递的参数类型(nvarchar)
在【执行计划】-【隐式转换】页中查看具体信息。
整个程序和数据库是否稳定、高效和结构设计的好坏密不可分,在巡检过程当中,结构设计时比较重要的一部分。不少时候运维人员和设计人员、开发人员沟通不顺畅、专业技能有差距,因此结构设计经常出现问题。