SQL2008系统性能优化解决方案
SQLServer2008R2占用cpu、内存越来越大的两种解决方法

SQLServer2008R2占⽤cpu、内存越来越⼤的两种解决⽅法SQL Server 2008 R2运⾏越久,占⽤内存会越来越⼤。
第⼀种:有了上边的分析结果,解决⽅法就简单了,定期重启下SQL Server 2008 R2数据库服务即可,使⽤任务计划定期执⾏下边批处理:net stop sqlserveragentnet stop mssqlservernet start mssqlservernet start sqlserveragent第⼆种:进⼊Sql server 企业管理器(管理数据库和表的,这个都不知道就不⽤往下看了),在数据库服务器名称上点击【右键】,选择【属性】,然后,找到【内存】选项,在右边的【使⽤AWE分配内存】(sqlServer64的应该不⽤勾)左边把对勾打上。
在最⼤服务器内存(MB)上填⼊适当的⼤⼩(具体填多⼤,肯定不能超过计算机的物理内存,当然,也可以在任务管理器中查⼀下,sqlserver.exe占有多⼤时,系统会变慢作为参考),记得是以M(兆)为单位,点确定,重启⼀下Sql服务器!OK!解决SQL Server CPU占⽤率⾼SQL Server CPU占⽤率⾼,⼀般是因为查询数据量⼤,执⾏时间长造成的。
这⾥提供调试⽅法,⽅便找出异常sql1、打开SQL Server Profiler2、新建跟踪a.点击新建跟踪,并设置好数据库连接b.设置跟踪属性,选择模板“Standard”c.切到“事件选择”进⾏跟踪设置1)只保留如下两个事件选项2)点击列筛选3)进⾏详细筛选设置设置CPU时间作为筛选条件,单位毫秒(⽤于跟踪耗CPU占⽤较长的查询,可设置为⼤于等于20000,按CPU内核数×1000,可以跟踪CPU占⽤100%⼤于1秒的查询)3、点击运⾏,跟踪语句,定位CPU占⽤较多的语句如下图所⽰,CPU占⽤2660146毫秒,CPU为24 核,则⾄少CPU占⽤100%耗时2660146/24/1000 = 110秒才可以执⾏好相应的操作4、根据语句特征,在你的服务器程序中找到相应的功能,作出修正4.1) 分析查询中需要检索数据量较⼤的部分,作出简单修正(如注销)4.2) 更新后重新执⾏此查询,查看profiler中是否CPU占⽤消失4.3) 如果已消失说明问题定位正确,可以优化查询,若CPU占⽤任然很多,则回滚修改,继续4.1操作补充资料:SQL Server 2008 R2运⾏越久,占⽤内存会越来越⼤。
SQL SEVER 2008性能调优

性能调优1百胜表规范USE ERP_DWGO/*功能说明:创建【区域】维度表修改说明:Create by LY on 2011-09-07*/IF EXISTS(SELECT 1FROM SYSOBJECTSWHERE id=OBJECT_ID('Dim_Area')AND type='U')BEGINDROP TABLE Dim_AreaENDGOCREATE TABLE[dbo].[Dim_Area](AreaCode VARCHAR(20)NOT NULL, AreaName VARCHAR(50)NULL,CONSTRAINT PK_DIM_AREA PRIMARY key (AreaCode) );GO/*功能说明:获取区域表有效的信息修改说明:Create by LY on 2011-09-07*/IF EXISTS(SELECT 1FROM SYSOBJECTSWHERE id=OBJECT_ID('VW_Dim_Area')AND type='V')BEGINDROP VIEW VW_Dim_AreaENDGOCREATE VIEW VW_Dim_AreaASSELECT AreaCodeFROM Dim_Area LEFT JOIN SYSOBJECTS ON 1=1LEFT JOIN SYSCOLUMNS ON 1=1 WHERE 1=1GROUP BY AreaCode功能说明:抽取业务库的数据到数据仓库修改说明:Create by LY on 2011-09-07Modify by LY on 2011-09-07 增加变量的注释*/IF EXISTS(SELECT 1FROM SYSOBJECTSWHERE id=OBJECT_ID('P_GetData_Load_Dim_Area')AND OBJECTPROPERTY(ID,N'IsProcedure')= 1)BEGINDROP PROCEDURE[dbo].[P_GetData_Load_Dim_Area]ENDGOSET ANSI_NULLS ONSET QUOTED_IDENTIFIER ONGOCREATE PROCEDURE[dbo].[P_GetData_Load_Dim_Area]@P_sourceDB_name NVARCHAR(50)----源数据库名称,数据从哪抽取ASBEGINBEGIN TRAN---开始事务DECLARE@TrunSql VARCHAR(50);----清空数据,不记录日志DECLARE@InsertSql VARCHAR(MAX);----插入数据SET@TrunSql=' TRUNCATE Table Dim_Area ';EXEC (@TrunSql)IF@@error<>0BEGINROLLBACK TRANRETURN-1ENDSET@InsertSql=' INSERT INTO Dim_AreaSELECTQUYU.QYDM as AreaCode,QUYU.QYMC as AreaNameFROMERP_Business..QUYU ';EXEC(@InsertSql)IF@@ERROR<>0BEGINROLLBACK TRANRETURN-1ENDCOMMIT TRANEND;/*功能说明:抽取业务库的数据到数据仓库修改说明:Create by LY on 2011-09-07Modify by LY on 2011-09-07 增加变量的注释*/IF OBJECT_ID('[dbo].[P_GetData_Load_Dim_Area]','P')IS NOT NULLDROP PROC[dbo].[P_GetData_Load_Dim_Area]GOSET ANSI_NULLS ONSET QUOTED_IDENTIFIER ONGOCREATE PROCEDURE[dbo].[P_GetData_Load_Dim_Area]@P_sourceDB_name NVARCHAR(50)----源数据库名称,数据从哪抽取ASBEGINBEGIN TRAN---开始事务DECLARE@TrunSql VARCHAR(50);----清空数据,不记录日志DECLARE@InsertSql VARCHAR(MAX);----插入数据SET@TrunSql=' TRUNCATE Table Dim_Area ';EXEC (@TrunSql)IF@@error<>0BEGINROLLBACK TRANRETURN-1ENDSET@InsertSql=' INSERT INTO Dim_AreaSELECTQUYU.QYDM as AreaCode,QUYU.QYMC as AreaNameFROMERP_Business..QUYU ';EXEC(@InsertSql)IF@@ERROR<>0BEGINROLLBACK TRANRETURN-1ENDCOMMIT TRANEND;2表分区SQL Server引入的表分区技术,让用户能够把数据分散存放到不同的物理磁盘中,提高这些磁盘的并行处理性能以优化查询性能2.1 表分区的介绍●表分区的作用,优点,步骤(1)分区表的作用:在大量业务数据处理的项目中,可以考虑使用分区表来提高应用系统的性能并方便数据管理,本文详细介绍了分区表的使用。
SQLServer2008R2-监视与调优解决方案

基本原则
防止与处理死锁
尽量避免或尽快处理阻塞 访问数据的顺序要相同 让不同的连接使用相同的锁 提供不同的数据访问路径
发生死锁后的解决
设置Deadlock优先级,让不重要的事务自动放弃
性能调优的方法学
架构设计
•表
查询优化
•存储过程 •视图
索引优化
•覆盖查询
并发控制
•锁 •事务
最简单 但是收效最少
锁与事务
锁 事务
不可分割性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability)
并发
事务隔离 • 未提交读 • 已提交读 • 可重复读 • 序列化 • 读提交快照 •行 •页 • 分区 •表 锁升级粒度
尽量将需要更新的数据放在一张较小的表中
在大规模删除中评估分区的效果
减少对自动编号的依赖
性能调优的方法学
架构设计
•表
查询优化
•存储过程 •索引视图
索引优化
•覆盖查询
并发控制
•锁 •事务
存储优化
•文件组 •分区
服务器优化
•内存 •处理器亲和度
性能最
优化
最困难 但最有成效
调优顺序
最简单 但是收效最少
CREATE INDEX IX_A ON T(att1) WHERE Name = ‘A’ OR Name = ‘E’ SELECT Name FROM T WHERE att1 = ‘a’
筛选索引的工作原理
ID 1 2 3 4 5 6 7 8 9 Name A B C D E F G H I h b k t w u k m att1 a d t j u l o att2 att3 x f att4 att5 att6 att7 att8 att9
SQLServer2008AnalysisService快速提升系列课程6 查询性能优化

诊断查询性能
SQL Server Profiler
Query Processing\Query Subcube Verbose Query Processing\Get Data From Aggregation
优化维度
• 属性关系 、自定义层次
优化的属性关系
自然和非自然的层次
常规属性关系
收听本次课程需具备的条件
• 熟悉SSAS开发 • 熟悉SSAS结构和概念、术语 • 熟悉MDX语法结构、熟练掌握MDX查询
Level 300
查询处理器架构
•
会话管理 • 作业 • 查询处理器 • 查询处理器缓存
Job architecture
查询处理器内部
• 子空间计算
RollingSum = (Year.PrevMember, Sales) + Sales SELECT 2005 on columns, Product.Members on rows WHERE RollingSum 逐单元格计算 子空间计算
WMV、MP3、MP4、Zune四种格式Webcast
访问iReaper主页: /iReaper
本次课程内容
• 如何增强SSAS查询性能
– 查询处理器架构; – 诊断查询性能; – 维度优化; – 最大化聚合价值; – 使用分区提升查询性能; – 优化MDX; – 利用缓存; – 并发用户查询性能;
SQL Server 2008 Analysis Service快速提升 系列课程(6):查询性能优化
赵阳 微软MVP、金牌培训讲师 yzhao@ 北京迈思奇科技有限公司.培训部总监
下载Webcast好帮手
iReaper
文件大小<=2.5Mb 可按照多种分类方式进行批量下载
MSSql优化步骤及优化notin一例

MSSql优化步骤及优化notin⼀例 今天接到客户投诉说系统卡死了,经过⼀翻努⼒,终于解决了。
现将解决步骤记录⼀下,以便下次参考:因为客户系统集中在阿⾥云上⾯,使⽤的是ms sql2008数据库,上⾯有N个客户,⼀下⼦⽆法知道是哪个客户。
第⼀步,先打开任务管理器,看看cpu使⽤情况,⼀看就知道是 ms sql server有⼤查询占⽤了所有的CPU时间,所以卡死系统。
第⼆步,打开ms sql server 的活动监控器,查看是哪条语句卡死。
打开活动监控器的⽅法。
在中的对象资源管理器,找到服务器,右击。
可以看到“活动监控器”,或者⽤快捷键ctrl+alt+A .。
第三步,找到有问题的语句。
点开进程,通过任务状态,筛选 running的进程。
逐个查看运⾏中的语句,分析最有可能卡住系统的语句,去运⾏⼀下。
就可以查到是哪条语句卡住了。
我的情况就是下⾯这句:SELECT rm, ode AS cOrderCode, A.dRequire, A.dSubmit, B.*,ode AS cProductCode, B.cProductSpec BcProductSpec, A.dConfirm,A.dCheck1, C.cParamter, C.cSpec AS cProductSpec, olor, reatorFROM Orders A WITH ( NOLOCK )LEFT JOIN Orders_Product B WITH ( NOLOCK ) ON A.cID = B.cOrdersIDLEFT JOIN Product C WITH ( NOLOCK ) ON B.cProductID = C.cIDLEFT JOIN (--⽣产的产品IDSELECT DISTINCT A1.cProductIDFROM dbo.Product_Item A1LEFT JOIN dbo.Orders_ProductItem A2 ON A1.cProductID = A2.cProductIDWHERE A1.iProduct !=0) D ON B.cProductID = D.cProductIDWHERE1=1AND B.cProductID = D.cProductIDAND A.iCancel ='0'AND ( iStatus =30OR ( iStatus =20AND iNewCRM !=1AND NOT EXISTS ( SELECT1FROM Orders_ProductItem WITH ( NOLOCK )WHERE iCustom =1AND cOrdersID = A.cID )))AND ( A.iStatusPP =0OR A.iStatusPP =1)AND NOT EXISTS ( SELECT1FROM MOrders_ProductLEFT JOIN dbo.MOrders ON MOrders.cID = MOrders_Product.cMOrdersIDWHERE cOrdersProductID = B.cSubIDAND dbo.MOrders.iStatus !=2 )AND B.iCancelM =0AND B.cSubID NOT IN (SELECT B.cOrdersProductIDFROM DOrders ALEFT JOIN DOrders_Sub B ON A.cID = B.cDOrdersIDWHERE iStatus =3 )ORDER BY A.dUDate DESC;经过分析定位到:not in 导⾄系统卡顿:B.cSubID NOT IN (SELECT B.cOrdersProductIDFROM DOrders ALEFT JOIN DOrders_Sub B ON A.cID = B.cDOrdersIDWHERE iStatus =3将not in 改为 not exists问题得以解决,系统正常运作。
SQL2008系统性能优化解决方案

SQL Server系统性能调优解决方案前言近几年,医药流通市场经历了激烈的震荡,导致行业逐步成熟和企业的快速变革,差异化经营成为众多医药流通的竞争选择。
时空产品在中国医药流通企业的发展过程中得到了广泛且深入应用,大量的客户化开发和定制支撑了企业管理中横向和纵向的变化,很好的适应了企业在发展过程中不断变化的需求。
对于数据库管理系统的使用,很多用户都面临着一个很棘手的问题:系统效率下降。
产生效率下降的因素是多方面:1.硬件问题2.软件问题3.实施问题正因为产生效率下降的因素很多,所以如何去查找原因成为我们首要关注的问题,时空公司也处在积极探索过程中。
时空公司在解决一些客户问题的过程中积累了一些方法和思路,归纳总结后呈现给体系内的技术人员,本方案就系统效率调整所必需的基础知识、方法、技巧等几个方面进行阐述,从而让技术人员能够快速定位问题,解决问题,为合作伙伴提供优质,快捷的服务。
索引简介索引是根据数据库表中一个或多个列的值进行排序的结构。
索引提供指针以指向存储在表中指定列的数据值,然后根据指定的排序次序排列这些指针。
数据库使用索引的方式与使用书的目录很相似,通过搜索索引找到特定的值,然后跟随指针到达包含该值的行。
索引键:用于创建索引的列。
索引类型聚集索引:聚集索引基于数据行的键值在表内排序和存储这些数据行。
由于数据行按基于聚集索引键的排序次序存储,因此聚集索引对查找行很有效。
每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。
数据行本身构成聚集索引的最低级别(叶子节点)。
只有当表包含聚集索引时,表内的数据行才按排序次序存储。
如果表没有聚集索引,则其数据行按堆集方式存储。
聚集索引对于那些经常要搜索范围值的列特别有效。
使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。
例如:如果应用程序执行的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。
SQL Server 2008性能优化实践探究

关键 词:索引;优化策略;数据库性能
当今社会信 息飞速发展 ,信息 增长 速度惊人 ,作为一个数 查找比较次数差别干倍万倍 ,但 当查找结果多到整个数据 表
手 段 。
1.查询语句使用索引的最基本要求就是要 以索引字段为查
一 、 优 化 设 计逻 辑 数 据 库 和 表
询条件 ,要注意 ,查询条件中不要将字段进行运算,避 免使用
在信息社会里,数据库 广泛应用于生产生活。数据库 的逻 not、!:操作符。2.任何对列的操作都将导致表扫描,它包括数据
据库管理和维护 人员,必须面 对 的问题 是,当数 据信息累积 到 20%的时候 ,建议不使用索引 ,直接在 表里查询 。
一 定规模时,必将导 致数 据库性能下降 ,数 据查询缓慢,甚至 无
为使用索引 ,查询语 句的写法须符合规范 ,否 则会 导致查
法正常使用 。定期维护数据库和优化性能就 成为重要 的解 决 询没有使用指定索引 ,查 询效 率也不见得有所提高 。
级 的因素 。索引分聚簇索 引和非聚簇索弓1。聚簇索引的顺序就 特 性 。如 果是 因为 SQL语句效 率非常低 。优化语句就 有助于
是数据 的物理存 储顺 序 ,而非聚簇 索引的索 引顺序与数据物 解决较低 的 CPU利用率。
理排列顺序 无关 。聚簇索引性能最好且具有唯 一性 。必须慎 重
可使用 的内存量 是 SQL Server性 能最关键 因素之一 ,而
设置 。一般 要根据这 个表最 常用 的 SQL查询方 式来进行选 内存和 I/O子 系统的关系也是一个非常重要的因素。例如 ,在
SQL Server 2008 高可用性解决方案

“写时复制” 技术
数据库镜像
整合方案
主站点 日志传送 辅劣站点 逻辑还原 复制 数据库报表和对读操作进行 外扩并使用容错机制 群集 本地服务器冗余 第三方存储厂商解决方案 站点存储高可用性 最高的硬件可靠性
复制 为查询外扩 数据库
群集
数据库镜像 热备
生产数据库
数据库镜像
同步,高可用配置
数据作为亊务的 一部分以同步的 方式进行镜像 如果主服务器失 败,自劢进行故 障转移 自劢客户端重定 向
客户端 见证
主体
镜像
数据库镜像
同步,高保护配置
数据作为亊务的 一部分以同步的 方式进行镜像 如果主服务器失 败,手劢进行故 障转移 自劢客户端重定 向
• 当其他连接丌可用的时候使用 • 用于排错或完全关闭SQL Server
• 默讣情冴下只允许在SQL Server服务器本机运行
资源调控器
SQL Server
备份
OLTP 活动
行政报表 即席报表
管理任务
高 管理工作负荷 OLTP 工作负荷
能区别对待丌同的工 作负荷 例如使用应用程序 名,登陆名等. 每个请求限制
应对备份集丢失或损坏的情冴
所有的备份类型都可以被镜像 每个设备必须是同样的类型 备份时所有的设备都要提供,但是还原时只需 要有一个备份集
Microsoft 群集
服务器硬件冗余
使用共享磁盘子系统 整个实例是虚拟的并作为整体故障转移 可以包含非SQL Server资源 SQL Server 2008丌再需要为每个实例 分配驱劢器盘符
重要性 最大内存百分比 最大 CPU 时间 授予超时值 最大请求数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL Server系统性能调优解决方案前言近几年,医药流通市场经历了激烈的震荡,导致行业逐步成熟和企业的快速变革,差异化经营成为众多医药流通的竞争选择。
时空产品在中国医药流通企业的发展过程中得到了广泛且深入应用,大量的客户化开发和定制支撑了企业管理中横向和纵向的变化,很好的适应了企业在发展过程中不断变化的需求。
对于数据库管理系统的使用,很多用户都面临着一个很棘手的问题:系统效率下降。
产生效率下降的因素是多方面:1.硬件问题2.软件问题3.实施问题正因为产生效率下降的因素很多,所以如何去查找原因成为我们首要关注的问题,时空公司也处在积极探索过程中。
时空公司在解决一些客户问题的过程中积累了一些方法和思路,归纳总结后呈现给体系内的技术人员,本方案就系统效率调整所必需的基础知识、方法、技巧等几个方面进行阐述,从而让技术人员能够快速定位问题,解决问题,为合作伙伴提供优质,快捷的服务。
索引简介索引是根据数据库表中一个或多个列的值进行排序的结构。
索引提供指针以指向存储在表中指定列的数据值,然后根据指定的排序次序排列这些指针。
数据库使用索引的方式与使用书的目录很相似,通过搜索索引找到特定的值,然后跟随指针到达包含该值的行。
索引键:用于创建索引的列。
索引类型➢聚集索引:聚集索引基于数据行的键值在表内排序和存储这些数据行。
由于数据行按基于聚集索引键的排序次序存储,因此聚集索引对查找行很有效。
每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。
数据行本身构成聚集索引的最低级别(叶子节点)。
只有当表包含聚集索引时,表内的数据行才按排序次序存储。
如果表没有聚集索引,则其数据行按堆集方式存储。
聚集索引对于那些经常要搜索范围值的列特别有效。
使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。
例如:如果应用程序执行的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。
这样有助于提高此类查询的性能。
同样,如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节省成本。
叶节点(包括数据)➢非聚集索引非聚集索引具有完全独立于数据行的结构。
非聚集索引的最低行包含非聚集索引的键值,并且每个键值项都有指针指向包含该键值的数据行。
数据行不按基于非聚集键的次序存储。
如果一个表只有非聚集索引,它的数据行将按无序的堆集方式存储,非聚集索引可以建多个。
叶节点(指向数据)➢唯一索引唯一索引可以确保索引列不包含重复的值。
在多列唯一索引的情况下,该索引可以确保索引列中每个值组合都是唯一的。
唯一索引既是索引也是约束。
➢复合索引索引项是多个的就叫组合索引,也叫复合索引。
复合索引使用时需要注意索引项的次序。
索引对性能的作用➢使用索引的优点1.通过唯一性索引(unique)可确保数据的唯一性2.加快数据的检索速度3.加快表之间的连接4.减少分组和排序的时间➢使用索引的原则1.在需要经常搜索的列上创建索引2.经常用于连接的列上创建索引3.经常需要根据范围进行搜索的列上创建索引4.经常需要排序的列上创建索引5.经常用于where子句的列上创建索引➢不使用索引的原则1.查询很少使用和参考的列不建索引2.对只有少数值的列不建索引3.定义为text、image、bit的列不建索引4.当需要update性能远远高于select性能时不建或少建索引➢常用命令1.sp_helpindex : 报告表或视图上的索引信息2.dbcc showcontig :显示指定表的数据和索引的碎片信息3.dbcc dbreindex :重建指定数据库中一个或多个索引4.dbcc indexdefrag :整理指定表或视图的聚集索引或辅助索引的碎片➢创建索引1.定义索引时,可以指定每列的数据是按升序还是降序存储。
如果不指定,则默认为升序2.为索引指定填充因子,可标识填充因子来指定每个索引页的填满程度。
索引页上的空余空间量很重要,因为当索引页填满时,系统必须花时间拆分它以便为新行腾出空间。
➢优化索引1.重建索引(dbcc dbreindex)2.索引优化向导3.整理指定的表或视图的聚集索引和辅助索引碎片(dbcc indexefrag)问题定位时空在产品开发过程中遵循大开发理,共四个研发层次,第一层技术研发,由时空技术研发部负责产品技术架构,平台工具的构建,第二层产品研发,由时空产品研发部负责应用系统搭建。
第三层项目研发,由渠道技术部负责客户化定制,第四层客户研发,由客户信息中心根据自己需求进行产品的定制。
随着层次的增加,产品研发过程控制能力逐渐减弱,而且对系统的关注角度也不同,随着系统内数据量的增加,效率问题将逐渐显现出来,如何查找影响系统效率的原因成为能否解决问题的关键。
在查找问题的过程中,把可能需要改进的程序或数据库对象及改进方法详细列举出来记录在《调整方案》(见附录)中。
一、检查数据表结构1.查看在客户化开发过程中增加的新表,字段类型是否合适,特别要关注字段长度较长字符型字段,可以考虑更改为VARCHAR类型。
检查数据表中主键设置情况。
明确数据表在系统中存在的意义以及使用情况。
2.检查系统当中频繁使用的数据表:maxbh,spkfk,spkfjc,hwsp,jxdjhz,jxdjmx,mchk,cwk,ywmxk,mxysyf,ywjsmxk,jsmxk,splsk ,查看主键,索引的设置是否合理,根据客户的实际使用情况对索引进行调整,对于在表中新增加的字段,一般来讲应针对该字段建单键索引或复合索引。
把检查情况记录在《调整方案》中。
二、检查存储过程时空产品在发布时是一个通用版本,为了兼容广大客户的需求,在业务处理逻辑上需要考虑方面比较多,而客户的业务流程和需求和产品本身差别可能很大,导致一些存储过程改动比较大。
例如:SBP_KP_JS(开票结算)SBP_JX_DJ(进销单据存储)SPU_Z_sp_account(商品帐页登记)SBP_WD_DJ(外调单据存储)首先,查看过程中业务处理逻辑,把不必要的语句屏蔽或删除,以减轻系统压力。
其次,查看过程中SQL语句编写情况,在满足需求的前提下,作进一步优化处理。
第三,关注对大表(数据量较大)进行操作的SQL语句,拷贝到查询分析器中,查看执行计划,根据计划情况,调整SQL语句或者相关表的索引。
三、检查检索方案第一.检查方案的数据过滤条件,尽量避免使用模糊匹配,在模糊查找时进行全表扫描,SQL 语句执行效率低下。
第二.仔细评定方案中需查询的字段必要性,减少网络流量。
第三.尽量减少方案中的连接子句所涉及的数据表。
第四.如果执行结果对数据实时性要求不高,或者没有数量,金额,成本等字段,应该使用锁定提示(NOLOCK).第五.根据客户使用习惯,拆分方案,分批获取所需要的数据。
如:销售开票时可以先提取商品,然后再根据商品内码提取货位,批号,数量等信息。
第六.分析查询方案的执行计划,调整SQL语句或者相关表索引。
四、检查查询方案第一.控制查询方案的字段个数。
第二.明确查询的过滤条件。
第三.提取数据时考虑是否有可替代的表(数据量小),尽量避开操作比较频繁的数据表。
第四.对于查询数据实时性要求不高,应该使用锁定提示(NOLOCK)。
五、优化数据库布局数据文件和日志文件的位置和分布对系统的性能来说非常重要。
数据库布局的两个关键性指导原则:第一.将连续访问的文件分布在专用磁盘上.一般情况下日志文件需要单独分配一个磁盘.第二.当布置数据文件时,应该将数据文件分布尽可能多的磁盘驱动器上,从而允许更多的并行磁盘访问。
我们可以多创建一些附属数据文件,把数据量较大的业务表单独放在一个磁盘上,为了明确地将数据库表和索引放在特定的磁盘驱动上,必须创建用户定义文件组,文件组提供了逻辑地将文件组合地起来的方法,以及将单个文件与主文件组分离的方法,如果不创建其他文件组,在默认情况下,所有文件都进入主文件组。
当在含有多个数据文件的文件组中创建表或索引时,SQL Server使用按比例填充机在文件之间分布数据。
使用这种机制SQL Server按数据文件的大小成比例地填充每个数据文件。
六、整体业务控制提高系统运行效率,是综合多方面,多环节调整结果的最终体现,我们要求的是整体最优,而不是局部最优。
要从全局的角度去衡量系统,而不是把目光只盯在某一个环节上,只有这样才能查找到系统当中一些隐含的问题,否则在实际运行时可能不会达预期效果,关注细节只是一个最基本工作要求。
如何提高从宏观角度去衡量系统所需要的素质,首先,必需了解客户管理理念,管理方式,熟悉客户的业务流程,从而确定系统应该为客户提供一个什么样的服务。
其次,了解使用人员的业务需求及其在使用过程中所关注的信息点。
第三,技术人员要非常熟悉时空的产品,掌握每一个功能模块的存在的价值和意义,以及业务处理的方法和逻辑。
具备了上述几种技能,才能在思考的过程把整个系统包融在自己思维中,才能跳出系统本身去透视产品运作流程,感受产品的使用方法,应用价值。
销售开票,是系统的一个基本的应用,选择商品,填写批号,数量等信息,但是使用人员发现检索数据的速度比较慢,影响业务的快速进行,这时就要考虑在操作过程中使用的方案是否有效,信息是否有意义,方案中使用的表在哪些环节经常被使用,在使用的过程中是否被锁定,我们可以按照这种方法进行横向或纵向的比较分析,逐步去找出问题的根源。
七、SQL语句跟踪系统效率下降,在许多情况下,产生问题的根本原因是效率低下的SQL语句,SQL事件探查器(SQL Profiler)将帮助技术人员确定是哪一个语句出现问题,当查找需要调整的SQL语句时,从使用资源最多或者运行时间最长或者最经常执行的SQL语句入手,调整一条或几条使用大量系统资源的SQL语句将对系统性能有显著影响。
通过跟踪SQL SERVER 的活动,可以区分哪个应用程序,存储过程和SQL语句占用了最长时间,或者哪些语句使用频率较高。
SQL Profiler所提供的预定义的跟踪模板,在许多情况下组织和功能都非常优秀,可以根据特性需求修改这些跟踪模板,并将这些修改后的跟踪模板保存为新模板,这样可以减少大量工作。
这些预定义跟踪模板如下所示:1.Standard(SQLServerProfilerStandard.tdf) 提供所执行的SQL语句和所完成的SQL批处理的详细息2.Stored Procedure Counts(SQLServerProfilerSP_Counts.tdf)记录已经执行的存储过程以及这些存储过程运行频率的数据,了解不同的存储过程运行的次数将有助于确定哪个存储过程是最好的调整对象。