标签:
春节期间,和朋友一起做了一个关于物流行业的系统优化,在此记录一下优化过程及过程中遇到的问题,用以备忘,同时分享给有类似需要的朋友.
首先交代一下背景:
- 数据库采用MS SqlServer 2008 R2, 数据库物理文件大小为150G.
- 系统大部分报表采用存储过程实时统计,前台系统通过视图实现.
- 快递物流行业,平均每天产生8000票新快递单,关系到单据网点及状态的流转,每票快递单表现在数据库中大概会产生8张新的其他跟踪单据.
- 数据库服务器: 8核CPU 256G 内存 1T固态硬盘, Windows Server 2008 64位操作系统.
- 正常时段(早6点-凌晨3点),平均实时在线用户数为4000+,闲时(凌晨3点-早6点)平均在线用户数为900+.
- 正常时段数据库服务器,CPU 占用率一直稳定徘徊在70%-90%的高位.
- 正常时段,系统功能使用异常卡顿,报表基本上出不来结果,数据库常常发生死锁.
在了解了以上背景后,我们对系统分别做了以下调整:
- 和核心业务无关的数据移除到另外的数据库, 如短信记录, 人员档案等.
- 优化索引.
- 核心业务的数据表采用按时段做分区表.
- 核心业务的数据提交采用根据操作日志按顺序合并后统一提交,而非直接操作原始数据库.
- 数据库读写分离.
SET STATISTICS PROFILE ON
SET STATISTICS IO ON
SET STATISTICS TIME ON GO /*--你的SQL脚本开始*/ SELECT * FROM tb /*--你的SQL脚本结束*/ GO SET STATISTICS PROFILE OFF
SET STATISTICS IO OFF
SET STATISTICS TIME OFF
通过设置STATISTICS我们可以查看执行SQL时的系统情况。选项有PROFILE,IO ,TIME。介绍如下:
SET STATISTICS PROFILE ON:显示分析、编译和执行查询所需的时间(以毫秒为单位)。
SET STATISTICS IO ON:报告与语句内引用的每个表的扫描数、逻辑读取数(在高速缓存中访问的页数)和物理读取数(访问磁盘的次数)有关的信息。
SET STATISTICS TIME ON:显示每个查询执行后的结果集,代表查询执行的配置文件。
标签:
原文地址:http://www.cnblogs.com/xie-zhonglai/p/db_and_sys_optimize.html