【能力提升】SQL Server常见问题介绍及快速解决建议
前言
本文旨在帮助SQL Server数据库的使用人员了解常见的问题,及快速解决这些问题。这些问题是数据库的常规管理问题,对于很多对数据库没有深入了解的朋友提供一个大概的常见问题框架。
下面一些问题是在近千家数据库用户诊断时发现的常规问题,本文分为【常见问题诊断流程】-【常见问题】-【常见问题快速解决的建议】
常见问题诊断流程
概览模块—[汇总]了解系统

了解系统性能(语句执行时间、会话等待)

语句执行时间:横坐标为时间范围,纵坐标为在执行时间在范围内分布的语句数量。
(本例:收集时间内语句执行时间在3-5秒的语句数量有1103条,5-10秒,10-20秒慢语句数量很多,说明系统语句执行缓慢,系统存在性能问题)

会话-等待类型:横坐标为等待类型,纵坐标为等待数量。
(本例:系统中发生大量的等待,说明系统存在性能问题)
了解系统运行指标(CPU、内存、磁盘计数器)
通过3个主要计数器诊断系统是否存在瓶颈和产生瓶颈的资源。


- 了解系统请求压力(批处理请求/每秒、连接数)
了解系统中每秒请求的语句数量和系统打开的连接数量,掌握系统压力量级。
(注:可多次收集分析,掌握系统压力波动和处理能力)


了解系统中的潜在风险与缺陷情况
(红色:严重程度高,建议问题全部解决)

[检查项]模块—[全部]发现系统问题

从系统、参数、会话、性能计数器、查询语句、作业、日志、执行计划、tempdb、业务数据库多方面呈现系统存在的问题与隐患。
(绿色:配置标准,蓝色:严重程度低,橙色:严重程度中等,红色:严重程度高,可能造成风险)
常见问题





性能问题
- 性能参数配置不合理:硬件不能发挥最大性能
- 系统等待严重:导致语句运行缓慢
- 执行超过3秒的语句数量多:客户体验差
- 存在缺失索引情况:导致语句运行缓慢,消耗过多系统资源
环境问题
- 磁盘空间规划问题:磁盘空间不足或不能满足未来业务
- 补丁不是最新:由于微软版本缺陷导致部分功能异常。
备份问题
- 备份缺失:故障
可用性问题
- 数据库单点风险:发生故障会导致业务中断,故障导致数据丢失
安全问题
- 缺少数据一致性检查(checkdb):不能及时发现数据损坏而最终导致数据库故障和数据丢失
- 大量登录失败:检查系统是否受到攻击或是否程序修改导致大量登录失败
结构设计问题
- 超过10分钟会话并带有事务:长时间存在不提交事务,会导致程序阻塞,检查应用程序是否有连接泄露
- 存在隐式转换:导致不能使用索引(例:表字段定义varchar,程序传参类型为nvarchar)
- 表缺少聚集索引:导致性能问题
- 表上外键缺失索引:导致性能问题
快速解决问题与常规建议
快速解决性能问题
配置系统参数
查看不合理参数—点击操作按钮

在弹出页查看当前运行值,与建议值。

弹出优化配置脚本—如需修改复制文本—在服务器运行即可修改
添加缺失索引
在【数据库】模块的【缺失索引】中,创建数据库的缺失索引。

注:并非所有提示的索引都需要创建,根据【平均影响百分比】【平均用户开销百分比】【用户查找次数】情况综合评价,建立系统中缺失的重要索引。并综合【相等列】【不等列】【包含列】创建包含多种情况的最优索引。
根据执行频率和开销分析重点语句
在【查询语句】模块的【查询语句】-【汇总视图】中,通过【执行次数】或【cpu时间】【读次数】【写次数】【影响行数】等对重点语句,重点优化。

点击语句可以进入【分类视图】,语句的详细执行信息页

在【分类视图】页面,可以点击语句进入【关联项】查看每条语句执行的具体信息及执行计划,等待等信息。

环境问题的建议
磁盘规划
- 按照文件类型划分:数据文件、日志文件、tempDB文件、备份文件,分别放在一个物理磁盘(4块物理磁盘)
- 按照数据库划分:不同的业务数据库(压力大的)分别放在一个物理磁盘,tempDB和备份文件各一个物理磁盘。(大型业务库数+2)
操作系统与版本
- 建议使用64位操作系统和SQL SERVER软件
- 建议SQL SERVER补丁为最新补丁
备份问题的建议
- 中小数据库备份方案:每天全备份、一小时一次日志备份。
- 大型数据库备份方案:每周全备份、每天差异备份、一小时一次日志备份。
- 备份文件与数据文件放置在不同物理磁盘
- 备份文件拷贝异地(容灾)
可用性建议
任何数据库为了保证业务的连续性和高可用性,以及数据的安全性,都必须采用高可用方案规避单点的风险。
数据库主流的高可用技术:Always On可用性组,SQL故障转移群集,日志传送技术,镜像技术,及moebius负载均衡集群
安全问题建议
账号安全与权限管理
通常的情况下,我们都是通过sa进行设置密码的,而且在config文件里面明文的写上我们的帐号和密码,这样的设计存在很大的安全隐患,无论是受攻击还是误删除都会给系统带来严重的后果,建议对用户进行权限规划,账号划分等安全措施。
维护任务CHECKDB保证数据安全
接触过上百家客户因为没有及时发现数据页损坏而导致的数据库不可用或数据丢失,建议每周运行及时发现数据库损坏。
结构设计的建议
聚集索引与外键索引
在表结构设计中建议表中都有聚集索引,外键添加索引,以提升性能。
隐式转换
在数据库物理设计和程序调用设计时字段类型不匹配(程序传入的类型转换优先级高于数据库中字段类型,如表中varchar 而程序传入nvarchar)会发生隐式转换,隐式转换增加数据库性能消耗,还会使索引无法使用而导致严重的性能问题。
通过工具语句的【执行计划】中找到对应的隐式转换处,分析程序传入和数据库表设计综合解决。

北京格瑞趋势科技有限公司是聚焦于数据服务的高新技术企业,成立于2008年,创始团队及核心技术人员来自微软和雅虎。微软数据平台金牌合作伙伴,卫宁健康数据平台战略合作伙伴。通过产品+服务双轮驱动的业务模式,14年间累计服务4000+客户,覆盖互联网、市政、交通、电信、医疗、教育、电力、制造业等各个领域。
【能力提升】SQL Server常见问题介绍及快速解决建议的更多相关文章
- SQL Server常见问题介绍及快速解决建议
前言 本文旨在帮助SQL Server数据库的使用人员了解常见的问题,及快速解决这些问题.这些问题是数据库的常规管理问题,对于很多对数据库没有深入了解的朋友提供一个大概的常见问题框架. 下面一些问题是 ...
- 【能力提升】SQL Server常见问题介绍及高速解决建议
前言 本文旨在帮助SQL Server数据库的使用人员了解常见的问题.及高速解决这些问题.这些问题是数据库的常规管理问题,对于非常多对数据库没有深入了解的朋友提供一个大概的常见问题框架. 以下一些问题 ...
- 转:SQL SERVER数据库中实现快速的数据提取和数据分页
探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo]. ...
- 无法打开物理文件xxx.mdf操作系统错误 5:“5(拒绝访问。)” (Microsoft SQL Server,错误: 5120)的解决方法
无法打开物理文件xxx.mdf操作系统错误 5:“5(拒绝访问.)” (Microsoft SQL Server,错误: 5120)的解决方法 问题描述: 在附加数据库到sql server时,附 ...
- Sql Server服务远程过程调用失败解决
Sql Server服务远程过程调用失败解决 问题: 今天SQL数据库登录不上了,然后想启动Sql实例,却发现如下问题(配置环境:win7旗舰版x64,SqlServer2008R2, ...
- SQL Server 2008 错误 233 的解决办法
问题一.忘记了登录Microsoft SQL Server 2008 的sa的登录密码 解决方法:先用windows身份验证的方式登录进去,然后在‘安全性’-‘登录’-右键单击‘sa’-‘属性’,修改 ...
- SQL Server 2008 允许远程链接 解决方法
用户在使用SQL Server 2008远程链接时,可能会弹出如下对话框: 在链接SQL服务器时发生网络链接错误或特定实例错误.SQL服务器不存在或者链接不成功.请验证用户名是否正确或SQL服务器是否 ...
- SQL Server作业没有执行的解决方法
SQL Server作业没有执行的解决方法 确保SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行 设置方法: 我的电脑--控制面板--管理工具--服务--右键 SQLSE ...
- 【常见的SQL Server连接失败错误以及解决方法】
[常见的SQL Server连接失败错误以及解决方法] http://blog.csdn.net/feixianxxx/article/details/5523922 ADO连接SQL Server ...
- 【译】索引进阶(一):SQL SERVER索引介绍
[译注:此文为翻译,由于本人水平所限,疏漏在所难免,欢迎探讨指正] 原文链接:http://www.sqlservercentral.com/articles/Stairway+Series/7 ...
随机推荐
- 【Unity】关于VS条件编译符号
写在前面 起因:我在回顾LuaFramework_UGUI(作者Jarjin Lee)代码时,看到了C#代码中的条件编译符号,比如下图的ASYNC_MODE.虽然字面上知道是什么意思,但我对VS的条件 ...
- Sql Server函数全解
--系统函数 create database sample_db; use sample_db; create table student ( i_sid int primary key identi ...
- Deepin20安装pip3和Pydev插件
1. 安装jdk(见前面) 2. 安装eclipse(见前面) 3. Deepin20里已经有python3.7.3和python2.7.16,我们可以直接使用3.7.3,也是默认的python3.还 ...
- JSP环境搭建及入门 和 虚拟路径和虚拟主机
Jsp:是一个动态网页,而不是静态网页 html,css,js,Jquery:是静态网页 动态网页是随着,时间,地点,用户操作,而改变 静态不需要jsp 动态是需要的 BS 可以通过浏览器直接访问浏览 ...
- Docker部署NextCloud
docker run -d -p 80:80 nextcloud 数据库可以选Mysql或者Pg 下载客户端 https://nextcloud.com/
- Java基础学习——复利计算
面对一个问题的时候,首先应该确定问题中存在多少参数,对每个参数进行定义.并知晓所写代码目标.思路清晰,
- enobj.cn站有更新
1:整体样式 2:可以折叠app列表 3:手机端样式 4: Blog链接到博客园
- winform 防止奔溃重启
static class Program { /// <summary> /// 应用程序的主入口点. /// </summary> [STAThread] static vo ...
- 01.html大致主体格式
<!DOCTYPE html> 不是HTML标签,就是文档声明标签 告诉浏览器使用哪种html版本来显示网页,其必须在文档中的最前面位置,要放在<html>标签之前, < ...
- boost编译指定python版本号
1.执行如下 bootstrap 语句,会在目录下生成 project-config.jam 文件 .\bootstrap --with-python="C:\Users\yzy\Anaco ...