SQL Server 性能调优(io)

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:   目录 诊断磁盘io问题... 1 常见的磁盘问题... 1 容量替代了性能... 1 负载隔离配置有问题... 2 分区对齐配置有问题... 2 总结... 2   关于io这一块,前面的东西如磁盘大小,磁盘带宽,随机读取写入,顺序读取写入,raid选择,DAS和SAN比较都不讲了。

 

 

目录

诊断磁盘io问题... 1

常见的磁盘问题... 1

容量替代了性能... 1

负载隔离配置有问题... 2

分区对齐配置有问题... 2

总结... 2

 

关于io这一块,前面的东西如磁盘大小,磁盘带宽,随机读取写入,顺序读取写入,raid选择,DASSAN比较都不讲了。

直接就开始讲关于io问题的诊断和一般问题的处理。

io这一块东西比较特殊,是数据库的重点,因为数据库一般都是io密集型产品,为了让io速度更快,那么数据库会使用内存来代替磁盘。

io出现问题,可能会连带其他资源的问题。cpu,内存,网络。所以在分析问题的时候对数据库结构的了解是必不可少的。

 

诊断磁盘io问题

一般使用的工具就是perfmon特别是 physical disk\disk reads/sec physical disk\ disk writes/sec

对于这2个性能指标有一个阀值的表格:

• Less than 10 ms = good performance

• Between 10 ms and 20 ms = slow performance

• Between 20 ms and 50 ms = poor performance

• Greater than 50 ms = significant performance problem.

 

还有一些就是 PAGEIOLATCH_*,ASYNC_IO_COMPLETION,IO_COMPLETION,WRITELOG这些等待事件。关于这些 wait event的查询可以看SQL Server 性能调优(方法论 

 

常见的磁盘问题

在此之前,我们先要排除集中状况就是,接下来讨论的和miss index,较差性能的写入,多余的io无关。单纯从io层面讨论io的配置问题。

io的配置问题最常见的有以下4中情况:

• 容量替代了性能

• 负载隔离配置有问题

• 分区对齐配置有问题

• SAN的带宽配置有问题(这个SAN 小弟不是很熟悉,那么就不讨论了,如果想了解情况可以查看原书:《Troubleshooting SQL Server: A Guide for the Accidental DBA)

 

容量替代了性能

一个800g的数据库可以存放在11t的磁盘中,也可以是通过raid拆分为多个磁盘,当然一个磁盘的性能明显比多个磁盘的要差。

负载隔离配置有问题

可能读到这里不太清楚负载隔离是什么,简单的说就是数据文件要放在哪里,日志文件要放在哪里,tempdb数据库要放在哪里。

负载隔离对sql server 存储计划来说是很重要的,最简单的,也是容被忽略的,为啥,因为不知道日志文件数据文件的区别,不知道生产库和tempdb之间的关系和区别。日志文件是顺序写入的,数据文件是随即读写的,如果你把2个放在同一个磁盘或者raid里面,要日志文件的顺序读写算啥了。都体现不出优点来了。

所以日志文件和数据文件要分开无疑。

分区对齐配置有问题

有一片相关的文章:《Disk Partition Alignment Best Practices for SQL Server》,很多人都不知道分区对齐是什么概念,但是又20%-30%的性能都浪费在上面。

关键的问题就是有63个保留扇区被用来MBR。当windows创建分区的时候就会保留31.5kb的空间供MBR使用。这样就照成了对齐,和raid的条带单元代销对齐了。raid条带的单元大小是从4kb512kb的。

多数磁盘一个扇区的大小是512B,但是 ssd4kb一个扇区,sql server 的推荐分配单元大小是64kb但是ntfs的大小则是4kb,根据推荐值64kb的大小就是128个扇区。但是保留扇区是63个,当发生io的时候,sql server 读取128个扇区,那么就会发生2io,从第一个磁盘中读取65个扇区,从第二个磁盘中读取63个扇区。为了阻止,windows 的保留空间变为了1mb,那么就能包容所有的raid单元条带的大小。但是windows2008以下的版本默认是对齐的。就需要命令行下调用diskpar或者diskpart来显示的对齐。

查看是否对齐的唯一方法就是wmic命令:

wmic partition get BlockSize, StartingOffset, Name, Index

如果用Startingofferset/raid条带大小,如果为整数那么就是对齐的否则就是对齐的。

分区保留扇区只能在磁盘的创建分区的时候设置。

create partition primary align=64

分区对齐后,可以给分区分配盘符并且在格式化的时候指定分配单元大小,这样就避免了没对齐带来的性能冲击。



总结

关于隔离的内容个人觉得讲得不是很深入,大家可以去看原书:《Disk Partition Alignment Best Practices for SQL Server》第二章的Choosing the Right RAID Level下的Workload considerations小节,详细描述了关于数据文件,日志文件,tempdb的特点,并建议使用哪种raid 比较合适。

这里的io问题主要是讲io的配置问题。io的配置如果撇开SAN不讲,还是挺简单的。

 

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
4天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
40 10
|
1月前
|
SQL 数据库 数据安全/隐私保护
Sql Server数据库Sa密码如何修改
Sql Server数据库Sa密码如何修改
|
2月前
|
SQL 算法 数据库
【数据库SQL server】关系数据库标准语言SQL之数据查询
【数据库SQL server】关系数据库标准语言SQL之数据查询
95 0
|
2月前
|
SQL 算法 数据库
【数据库SQL server】关系数据库标准语言SQL之视图
【数据库SQL server】关系数据库标准语言SQL之视图
72 0
|
2月前
|
SQL 人工智能 算法
【数据库SQL server】传统运算符与专门运算符
【数据库SQL server】传统运算符与专门运算符
68 0
|
14天前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
15 0
|
4天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
50 6
|
5天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
8天前
|
SQL 安全 Java
SQL server 2017安装教程
SQL server 2017安装教程
13 1
|
22天前
|
SQL 存储 Python
Microsoft SQL Server 编写汉字转拼音函数
Microsoft SQL Server 编写汉字转拼音函数