sqlservermysql性能_SQLSERVER数据库性能的的基本SQLSERVER 数据库性能的基本
很久没有写⽂章了,在系统正式上线之前,DBA⼀般都要测试⼀下服务器的性能
⽐如你有很多的服务器,有些做web服务器,有些做缓存服务器,有些做⽂件服务器,有些做数据库服务器
做数据库服务器的那台服务器性能要相对较好,磁盘,内存,CPU等等,
那么在选⽤其中某⼀台服务器作为数据库服务器之前需要测试每⼀台服务器的性能
并且需要设置⼀些硬件的参数,例如设置磁盘控制器的参数,参考⽂章:Writeback和Writethrough区别
那么具体怎麽测试呢?怎麽得出测试指标呢?
正⽂
随着市场份额的SQL Server的发展随着时间的推移,有越来越多的对SQL服务器性能调优的需求。
有不同的团队和个⼈采⽤各种各样的⽅法提⾼SQLSERVER服务器的性能,
⽽且我认为这些记录SQLSERVER troubleshooting的基本步骤和提⾼各种程序性能的⽂档对SQLSERVER社区是有意义的
磁盘
为了SQLSERVER能有效运⾏,监控和优化SQLSERVER的磁盘⼦系统是⼀个重要的⽅⾯
我们需要⾮常明确磁盘的性能需求
mysql下载到了c盘Avg. Disk Sec/Read 这个计数器是指每秒从磁盘读取数据的平均值
下⾯的列表显⽰这个计数器值的范围,并指出这个计数器所处范围的意思
少于 10 ms - ⾮常好
在 10 - 20 ms 之间- 还可以
在 20 - 50 ms 之间-慢,需要关注
⼤于 50 ms –严重的 I/O 瓶颈
磁盘性能测试⼯具
(1)CrystalDiskMark
(2)HDTUNE 硬盘检测修复⼯具
(3)ATTO Disk Benchmark
辨别I/O瓶颈
PhysicalDisk Object:Avg. Disk Queue:所选物理磁盘在取样期间被排队的磁盘读写请求平均值
如果你的磁盘队列长度经常超出SQLSERVER磁盘使⽤峰值的2倍,那意味着可能有I/O瓶颈了
Avg. Disk Sec/Read:每秒从磁盘读取数据的平均值
Avg. Disk Sec/Write:写⼊数据到磁盘的平均时间,Avg. Disk Sec/Read参考指标
Physical Disk:%Disk Time磁盘时间是所选磁盘驱动器繁忙处理读写请求时所花时间的百分⽐,⼀个指标就是如果这个值⼤于50%,那么就存在I/O瓶颈
Avg. Disk Reads/Sec:在磁盘上的读操作的⽐率。确保这个数字⼩于磁盘吞吐量的85%。当这个值超过85%磁盘访问时间会以指数式增长
Avg. Disk Writes/Sec c:在磁盘上的写操作的⽐率。确保这个数字⼩于磁盘吞吐量的85%。当这个值超过85%磁盘访问时间会以指数式增长
磁盘驱动器的位置:
为了不同的⽬的,你需要使⽤不同的驱动器来存放下⾯的东西
独⽴的磁盘延时需求:
数据库⼤于15ms
事务⽇志⼤于2ms
Tempdb数据库⼤于2ms
磁盘速度的优先级
意思是说,Tempdb放在单独的物理磁盘,事务⽇志⽂件放在单独的物理磁盘,数据⽂件放在单独的物理磁盘,操作系统放在单独的物理磁盘,
数据库备份⽂件放在单独的物理磁盘
⼀般我们的做法:不可能有那么多单独的物理磁盘,⼀般就是做了磁盘阵列的存储
C盘放操作系统⽂件
D盘放数据⽂件和事务⽇志⽂件 和Tempdb数据⽂件和Tempdb⽇志⽂件
E盘放数据库备份⽂件
当格式化磁盘的时候,对于要存放SQLSERVER数据⽂件和⽇志⽂件的磁盘,尽量不要使⽤默认的磁盘分配单元
使⽤64k 簇⼤⼩ Allocation Unit来格式化磁盘,⾄于为什麽⼤家可以看⼀下这篇⽂章:如何⽤来监视SQLSERVER的logwrite⼤⼩
杀毒软件
杀毒软件会对SQLSERVER的⼀些功能产⽣问题,使⽤杀毒软件的排除功能将数据库的⽂件排除在扫描的范围外是很重要的(放⼊杀软的扫描例外⾥)
下⾯的⽂件类型是需要排除在外的
*.mdf, *.ndf, *.ldf, *.bak
⽂章中说到因为杀毒软件扫描备份⽂件夹并锁住了备份⽂件夹,导致SQLSERVER备份数据库失败
内存
总是给分配最⼤的内存给SQLSERVER实例在服务器属性那⾥设置
注意:最⼤内存设置只对SQLSERVER的buffer cache部分有效,不包括SQLSERVER的⼀些需要内存的功能,例如复制
(SQLSERVER2012的最⼤内存设置已经可以限制buffer cache部分和⾮buffer cache部分的内存)
为了指明Non-Buffer Pool 的内存占⽤,使⽤下⾯的说明
SQL Server’s buffer pool外的内存需求(这个需求不是说你设置了SQLSERVER最⼤内存之后,所剩下的内存的需求,不管你有没有设置SQLSERVER的最⼤内存
下⾯⼏项都是服务器固定需要消耗的内存,⽽⽆论你的服务器内存是4G,8G还是16G,下⾯⼏项都会固定占⽤服务器的内存)
(1)操作系统需要占⽤2GB内存,如果是64位操作系统,操作系统占⽤内存不⼤于3GB
(2)SQLSERVER⼯作线程的倍数,你可以在SQLSERVER服务器属性⾥设置最⼤⼯作线程,
每个线程会使⽤0.5MB内存(X86服务器)
每个线程会使⽤2MB内存(X64服务器)
每个线程会使⽤4MB内存(Itanium服务器)
注意:0.5MB内存存放的是线程⾃⾝的数据结构和相关信息,不包括数据
为什么各种服务器所分配的线程内存不⼀样,这个是操作系统分配的,SQLSERVER并没有做特别的设置!
如果你设置最⼤的⼯作线程数为10个,服务器是X86,刚好服务器⽤尽了10个线程,那么占⽤的内存是10*0.5MB=5MB内存
(3)1GB的 multi-page 内存占⽤,链接服务器和其他SQLSERVER外围的程序占⽤
(4)运⾏在服务器上的程序可能占⽤1~3GB内存,例如备份程序
例⼦
例如,⼀个8核服务器,16GB内存,运⾏着SQLSERVER2012 X64,上⾯运⾏着第三⽅的备份程序,你可以参照下⾯的清单
(1)3GB 给 Windows (2GB for 32 Bit Windows)
(2)1GB 给 SQLSERVER ⼯作线程 (576 × 2MB ⼤概)
各种CPU和SQLSERVER版本组合⾃动配置的最⼤⼯作线程数
CPU数 32位计算机 64位计算机
<=4 256 512
8 288 576
16 352 704
32 480 960
(3)1GB for MPAs, etc. (multi-page apply)
(4)1~2 GB 给 备份程序.
(For SQL Server 2008).
开启Lock Pages in Memory 选项
Windows组策略决定哪个Windows账户能使进程将他的数据逗留在物理内存⾥,防⽌操作系统把程序数据从物理内存换页换出磁盘上的虚拟内存
这能够给您带来性能上的提升,特别遇到内存压⼒的时候
TempDB 数据库的优化
默认,Tempdb数据库只有⼀个数据⽂件和事务⽇志⽂件。然⽽,为了性能的优化,跟着下⾯给出的建议最佳实践
TempDB数据库的存储计划
(1)设置Tempdb数据库的恢复模式为简单(默认就是简单的),简单模式能够⾃动回收⽇志空间使⽇志空间的需求保持最⼩
(2)不要让Tempdb的数据⽂件⾃动增长,这可以减少管理动态⽂件增长的CPU开销
对于Tempdb数据库,可以分开多个数据⽂件(总的Tempdb数据库数据⽂件的数量=CPU逻辑处理器的数量,⽐如8核服务器可以分8个数据⽂件)
每个数据⽂件的⼤⼩要⼀样
(3)尝试将这些数据⽂件存放在不同的磁盘驱动器上以利⽤并⾏I/O
(4)TempDB 数据⽂件和 ⽇志⽂件应该存放在较快速度的磁盘上(如果可能推荐放在做了RAID 1的磁盘上)
(5)使⽤RAID-10 或者 SSD 磁盘
(6)预先定义好Tempdb数据库的⽂件⼤⼩
(7)设置Tempdb总的⼤⼩为当前数据库实例中最⼤的那个数据库的25%
(8)设置Tempdb数据⽂件⾃动增长的固定⼤⼩⼩于200MB
(9)你应该设置Tempdb数据库的数据⽂件数量跟逻辑CPU的数量⼀致,最多不超过8个数据⽂件
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论