前言

  做好日常巡检是数据库管理和维护的重要步骤,而且需要对每次巡检日期、结果进行登记,同时可能需要出一份巡检报告。

  本系列旨在解决一些常见的困扰:

不知道巡检哪些东西
不知道怎么样便捷体检
机器太多体检麻烦
生成报告困难,无法直观呈现结果

  前面两篇对服务器软硬件配置、数据库概况进行了巡检,下面我们要对数据库的一些结构设计进行检查,这些检查主要针对系统开发初期一些不优化的结构设计或在系统不断有新功能增加或运维变动而产生的结构变化。

物理结构概览

  在【检查项】-【全部】中查看每个数据库的信息,当数据库结构未通过常规检查,平台会提示出警告。

  注:检查信息主要包含不规范的表、缺失索引、无索引外键、没有使用的索引、重复索引、老化的索引。

不规范的表

  在【数据库】-【不规范的表】中检查系统中表是否存在有不规范设计。这些不规范设计主要包含无聚集索引,使用旧数据类型,聚集索引的列是随机增长的(GUID,uniqueidentifier类型)

  注:

  1.微软建议在表中都建议有聚集索引。聚集索引除了可以提高查询性能之外,还可以按需重新生成或重新组织来控制表碎片。

  2.在 Microsoft SQL Server 的未来版本中将删除 ntext、text 和 image 数据类型。 请避免在新开发工作中使用这些数据类型,并考虑修改当前使用这些数据类型的应用程序。 请改用 nvarchar(max)、varchar(max) 和 varbinary(max)。

  3.聚集索引本身是要排序的,而GUID(uniqueidentifier类型)这样插入数据时导致过多的页拆分。

缺失索引

  数据库设计中索引是性能的一大关键,当数据库缺失大量索引,那么也必然导致数据库的性能很差。

无索引外键

对主表数据操作时(如删除),需要到外键表中查找校验,如果缺少外键索引可能导致全表扫描,严重影响性能。

当在查询中组合相关表中的数据时,经常在联接条件中使用外键列,方法是将一个表的 FOREIGN KEY 约束中的列与另一个表中的主键列或唯一键列匹配。索引使 数据库引擎可以在外键表中快速查找相关数据,提升性能。

没有使用的索引

  随着开发和优化的进行,很多人会对数据库进行索引的创建操作,很多时候创建了一个较优的联合索引或者覆盖索引,会让原本单列的索引失去使用的场景,这部分索引会出现在,长时间未使用的索引中,建议删除。

重复索引

  

   随着开发和优化的进行,很多人会对数据库进行索引的创建操作,那么页难免会产生一些功能相近或相同的索引,索引本身也是有维护成本,在更新、插入、删除时会有一定的开销,那么重复的索引只会增加这部分维护开销。

老化的索引

  索引维护是配置常规维护任务之一,随着数据的不断写入和变更,会产生大量的索引碎片,缺少维护任务的索引,无法及时重新组织索引数据,导致索引低效,甚至失效。

程序设计结构概览

  1.在【检查项】-【结构设计】中查看会话信息和执行计划,当设计结构未通过常规检查,平台会提示出警告。

  注:检查信息主要会话隔离级别、是否存在带有事务的长时间会话、执行计划中是否存在隐式转换。

会话信息

  1.在【会话】-【空闲会话】中查看会话信息。

  注:主要关注,长时间未关闭会话和长时间未关闭并带有事务的会话。长时间带有事务的会话可能是因为程序连接泄露导致,长时间带有事务会阻塞其他会话的正常进行,造成系统卡死等严重性能问题。

2.在【会话】-【概览】页中查看会话详细信息,主要关注事务隔离级别。

  事务隔离级别简述:事务隔离级别主要控制查询(共享锁),隔离级别越高并发能力就越差。(详细信息请参见:平台技术资料,最佳配置)

  如果在程序中发现大量REPEATABLE_READ(可重复读)或SERIALIZABLE(可序列化),请检查程序是否有必要使用高级别的隔离级别,而导致阻塞等待增加,数据库并发能力下降。
  
  注:如果在系统中存在大量高级别的事务级别,请确认是否需要高的隔离级别而牺牲并发能力。

隐式转换

  存在隐式转换的执行计划:语句存在隐式转换导致性能消耗,或不能使用索引。

  注:隐式转换常发生在表设计的字段类型(varchar)优先级别低于程序传递的参数类型(nvarchar)

  在【执行计划】-【隐式转换】页中查看具体信息。

总结

  整个程序和数据库是否稳定、高效和结构设计的好坏密不可分,在巡检过程中,结构设计时比较重要的一部分。很多时候运维人员和设计人员、开发人员沟通不畅、专业技能有差距,所以结构设计常常出现问题。

北京格瑞趋势科技有限公司是聚焦于数据服务的高新技术企业,成立于2008年,创始团队及核心技术人员来自微软和雅虎。微软数据平台金牌合作伙伴,卫宁健康数据平台战略合作伙伴。通过产品+服务双轮驱动的业务模式,14年间累计服务4000+客户,覆盖互联网、市政、交通、电信、医疗、教育、电力、制造业等各个领域。

SQL SERVER日常运维巡检系列——结构设计的更多相关文章

  1. SQL SERVER自动化运维系列

    SQL SERVER自动化运维系列 转自:https://www.cnblogs.com/zhijianliutang/p/5001142.html 本系列为SQL SERVER自动化运维的一些操作技 ...

  2. SQL Server 自动化运维系列

    本系列为SQL SERVER自动化运维的一些操作技巧点,所有内容都是根据日常运维过程中最经常遇到的问题,并为此形成了一些自动化运维的方式,皆为原创.... 供部分DBA和开发人员浏览借鉴,所应用平台基 ...

  3. 1、SQL Server自动化运维 - 备份(一)业务数据库

    为了能够恢复数据,数据库运维基础就是备份,备份自动化也是运维自动化首要进行的. 笔者的备份自动化,通过配置表快速配置为前提,同时记录备份过程,尽可能的减少人工操作.首先将SQL Server备份按用途 ...

  4. sql server自动化运维脚本

    数据库运维中盛传一个小段子,我误删除了数据库,改怎么办?有备份还原备份,没有备份就准备简历!听起来有趣但发生在谁身上,谁都笑不起来.接触了很多的客户发现90%客户的运维策略都不是很完善.本篇就分享一些 ...

  5. Istio 运维实战系列(3):让人头大的『无头服务』-下

    本系列文章将介绍用户从 Spring Cloud,Dubbo 等传统微服务框架迁移到 Istio 服务网格时的一些经验,以及在使用 Istio 过程中可能遇到的一些常见问题的解决方法. 失败的 Eur ...

  6. SQL Server自动化运维系列——监控跑批Job运行状态(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在上一篇文章中已经分析了SQL SERVER中关于邮 ...

  7. SQL Server自动化运维系列——监控磁盘剩余空间及SQL Server错误日志(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...

  8. SQL Server自动化运维系列——关于邮件通知那点事(.Net开发人员的福利)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 邮件作为一种非常便利的预警实现方式,在及时性和易用性 ...

  9. SQL Server自动化运维系列——关于数据收集(多服务器数据收集和性能监控)

    需求描述 在生产环境中,很多情况下需要采集数据,用以定位问题或者形成基线. 关于SQL Server中的数据采集有着很多种的解决思路,可以采用Trace.Profile.SQLdiag.扩展事件等诸多 ...

  10. SQL Server自动化运维系列 - 监控磁盘剩余空间及SQL Server错误日志(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...

随机推荐

  1. Kali初次使用,如何获得root权限?【转】

    最新的kali 系统,安装的时候会创建一个新用户,不是root的,然后安装软件的时候会要求root权限,要启用root账号可以按下面这个写的 方法1已经确认可以.方法2没尝试,自己试试吧. 1.确定用 ...

  2. vlan 技术

    Ref: VLAN及Trunk,重要!看瑞哥如何讲的明明白白! 图文并茂VLAN以及Trunk详解,超级详细

  3. netcore高级知识点,内存对齐,原理与示例

    最近几年一直从事物联网开发,与硬件打交道越来越多,发现越接近底层开发对性能的追求越高,毕竟硬件资源相对上层应用来实在是太缺乏了.今天想和大家一起分享关于C#中的内存对齐,希望通过理解和优化内存对齐,可 ...

  4. 深入理解c语言指针与内存

    一.将int强制转换为int指针,将int指针强转换为int void f(void) { int *p = (int*)100; //将int强制转换为int指针 printf("%d\n ...

  5. ASP.NET Core – CORS (Cross-Origin Resource Sharing)

    参考 Docs – Enable Cross-Origin Requests (CORS) in ASP.NET Core 介绍 CORS (Cross-Origin Resource Sharing ...

  6. Asp.net core 学习笔记之 globalization & localization 复习篇

    更新: 2022-03-22 修订版: ASP.NET Core – Globalization & Localization 更新: 2021-06-15 之前有说过, 我没有使用默认的 f ...

  7. SpringMVC——SSM整合——表现层数据封装

    表现层数据封装 设置统一数据返回结果类 注意:Result类中的字段并不是固定的,可以根据需要自行增减提供若干个构造方法,方便操作 返回结果类 package com.cqupt.controller ...

  8. 2024年常用的Net web框架

    ASP.NET Core 框架声明:是微软推出的新一代开源.跨平台的 Web 应用框架,用于构建高性能.现代化的 Web 应用程序. 官网地址:https://dotnet.microsoft.com ...

  9. [CL-FOOL] CLOI 愚人赛的部分官方题解与小杂谈

    小细节 谁会拿 Rank 奖励? 头图里有写哦. 发现没有,这里的问号是蓝色的,点进去可以进到彩蛋界面. 当然彩蛋界面也什么都没有,提交界面藏在下面的源码里. 那么交什么呢. CLOI 的文件里有一团 ...

  10. 2022年11月中国数据库排行榜:GaussDB获认证进前五,GBase得融资竞逐鹿

    击石乃有火,不击元无烟. 2022年11月的 墨天轮中国数据库流行度排行榜 火热出炉,本月共有246个数据库参与排名,相比上月新增1个数据库.由于国庆节长假,数据库整体热度指数有所降低,所以出现了多数 ...