`

SQLServer性能优化一则小实例(2010-07-21)

 
阅读更多

首先找到 最耗CPU的top50 SQL
SELECT
total_cpu_time,
total_execution_count,
number_of_statements,
s2.text
--(SELECT SUBSTRING(s2.text, statement_start_offset / 2, ((CASE WHEN statement_end_offset = -1 THEN (LEN(CONVERT(NVARCHAR(MAX), s2.text)) * 2) ELSE statement_end_offset END) - statement_start_offset) / 2) ) AS query_text
FROM
(SELECT TOP 50
SUM(qs.total_worker_time) AS total_cpu_time,
SUM(qs.execution_count) AS total_execution_count,
COUNT(*) ASnumber_of_statements,
qs.sql_handle --,
--MIN(statement_start_offset) AS statement_start_offset,
--MAX(statement_end_offset) AS statement_end_offset
FROM
sys.dm_exec_query_stats AS qs
GROUP BY qs.sql_handle
ORDER BY SUM(qs.total_worker_time) DESC) AS stats
CROSS APPLY sys.dm_exec_sql_text(stats.sql_handle) AS s2

有一条SQL执行效率非常差,大概30秒~80秒不等,而且占据了所有CPU消耗时间的20%,并且执行次数也很多
select f_getconcatname(id) from table where id>1 and id<100

如果单个ID,速度还是很快的,初步判断是ID未作索引的问题
后来查看了一下该表的定义,已经做了索引,索引可以排除掉
在接着判断是函数的问题
查看了一下函数的定义,这个只是大概的函数
create function f_getconcatname(@id)
as
DECLARE cur_concat CURSOR FOR SELECT Name FROM tableB where id=@id
declare @ret varchar(200),@tmp varchar(20)
set @ret='';
set @tmp=''
OPEN cur_concat
FETCH NEXT FROM cur_concat into @tmp
WHILE @@FETCH_STATUS = 0
BEGIN
set ret=@ret+@tmp+','
FETCH NEXT FROM cur_concat into @tmp
END

CLOSE contact_cursor
DEALLOCATE contact_cursor

end

原以为是函数内游标循环太慢就修改了一下该函数
create function f_getconcatname(@id)
as
declare @ret varchar(200)
set @ret='';
SELECT @ret=@ret+Name+',' FROM tableB where id=@id
return @ret
end

没想到竟然比游标还慢
后来检查了一下tableB关于ID的定义,发现ID没有定义为索引
添加索引后再次尝试,发现速度提高到0~1秒
OK,解决该问题

同时在CPU 消耗总量的TOP 50中居然有25问题与之有关,一连串顺带解决了25个问题,意外之喜

分享到:
评论

相关推荐

    SQL Server性能优化专题之五:负载均衡

    在SQL Server性能优化的过程中,负载均衡是一个至关重要的概念,尤其对于处理大型数据库的场景。负载均衡旨在有效地分配系统资源,确保服务器性能的稳定性和高可用性,避免单一节点过载,提高整体系统的响应时间和...

    sqlserver2008R2应用添加实例步骤

    对于需要在同一台服务器上运行多个独立的SQL Server环境(即多个实例)的情况,了解如何正确添加实例至关重要。本文将详细介绍SQL Server 2008 R2 添加实例的具体步骤,帮助用户顺利完成操作。 #### 二、准备工作 ...

    SQLserver性能检测和优化.docx

    SQL Server性能检测和优化是数据库管理系统中至关重要的环节,尤其当面临系统性能低下时,有效诊断和提升系统效能显得尤为关键。SQL Server Profiler作为一款内置的性能分析工具,能够帮助我们实时监控数据库和...

    SQLServer性能分析

    SQL Server性能监视器是Microsoft Windows操作系统内置的一个工具,用于收集和查看系统以及应用程序的性能数据。对于SQL Server来说,它可以用来监测各种性能计数器,帮助我们了解SQL Server实例的运行状况,进而...

    SQL Server Native Client 11-sqlncli-11驱动

    总结来说,SQL Server Native Client 11是一个强大的数据库访问库,提供了对SQL Server的全面支持,包括多种数据访问接口、性能优化、高级特性、安全性和广泛的开发工具集成。无论是开发新应用还是升级现有应用,它...

    C#+SQL Server中小型信息系统开发实例精选

    《C#+SQL Server中小型信息系统开发实例精选》是针对IT专业学生和初级开发者的一份宝贵资源,它涵盖了在毕业设计中可能会遇到的各种实际问题和解决方案。本书着重于利用C#编程语言与SQL Server数据库管理系统相结合...

    中文版SQLServer2000开发与管理应用实例源码

    在压缩包中的“SQLServer2000”文件可能包含了一系列的SQL脚本文件、数据库备份文件或演示程序,读者需要配合书中的讲解逐步操作,以达到最佳学习效果。每个文件都可能对应书中一个具体的章节或实例,通过实际运行和...

    SQL Server2005 SP4

    这两个文件名——"sqlserver2005sp4-kb2463332-x64-chs_0473159bb4dec7f4e17f3fc152de5e8945d3e3cc.exe"和"sqlserver2005sp4-kb2463332-x86-chs_48ab3b127c355ef499b7ef8630b130868298d891.exe",分别对应了这两个...

    ASP.NET+SQLServer网络应用系统开发与实例.rar

    "ASP.NET+SQLServer网络应用系统开发与实例"这个项目可能包含一个或多个实际应用案例,比如一个电子商务网站、在线学习平台或企业内部管理系统,展示了如何整合ASP.NET和SQL Server来实现特定的功能需求。...

    链接sql server 的经典实例

    在设计学生管理系统时,还需要考虑性能优化,如使用索引提升查询速度,合理设计数据库架构以减少数据冗余,以及使用存储过程和触发器提高数据处理效率。 总之,"链接SQL Server的经典实例"涵盖了数据库连接、SQL...

    SQL Server数据库开发实例精粹

    《SQL Server数据库开发实例精粹》是一本深入探讨SQL Server数据库开发的专业书籍,它通过丰富的实例,详细讲解了SQL Server在实际应用中的各种技术和策略。这本书的配套光盘包含了源码和相关技术文档,旨在帮助读者...

    Microsoft SQL Server 2008技术内幕:T-SQL查询_源代码及附录.zip

    《Microsoft SQL Server 2008技术内幕:T-SQL查询》是一本深入探讨SQL Server 2008中T-SQL(Transact-SQL)查询的权威书籍。T-SQL是SQL Server数据库管理系统的核心语言,用于数据操作、查询、存储过程编写以及...

    SqlServer使用实例

    **SqlServer使用实例** Sql Server是Microsoft公司开发的一款关系型数据库管理系统,广泛应用于企业级数据存储和管理。在本文中,我们将深入探讨Sql Server的一些核心功能和常见操作,包括常用函数和存储过程的介绍...

    Microsoft SQL Server 7性能优化

    ### Microsoft SQL Server 7性能优化相关知识点 #### 一、性能调整、容量规划与大小估计 - **性能调整与优化**:性能调整是通过一系列技术和策略改进系统性能的过程。这通常涉及三个主要方面: - **应用调整**:对...

    SqlServer连接工具

    SQL Server Compact Toolbox适用于处理SQL Server Compact Edition数据库,而SQL Server Express Management Studio则为SQL Server Express用户提供了一套基本的管理工具。 在实际应用中,SQL Server连接工具通常...

    sqlserver2000的开发及管理应用实例

    2. 性能优化:监控SQL Server性能,通过索引优化、查询优化、资源调优提高系统响应速度。 3. 高可用性:了解镜像、集群、数据库复制等高可用性解决方案,确保数据库的持续运行。 五、C#应用开发 1. Windows Forms...

    使用CPU计数器监视SQL Server性能的

    在SQL Server性能优化中,使用CPU计数器是至关重要的工具,可以帮助我们识别和解决可能导致系统瓶颈的问题。本文主要探讨了几个关键的CPU资源消耗点,以及如何通过监控和调整来提升SQL Server的性能。 首先,上下文...

    安装SQL Server 2005实例环境图解

    在安装SQL Server 2005时,确保遵循最佳实践以优化安全性、性能和管理性。以下是一些关键知识点的详细说明: 1. **安装必要的组件**:只安装你的应用程序需要的SQL Server组件,例如数据库引擎、Analysis Services...

    SQL SERVER项目案例(sql代码)

    5. **性能优化**:涉及查询优化器的选择、索引的使用、查询语句的优化(如避免全表扫描、减少笛卡尔积),以及性能监控工具的使用,如SQL Server Profiler。 6. **数据库安全**:包括用户权限管理、角色定义、登录...

    sqlserver2008数据库实例

    这个“sqlserver2008数据库实例”是一个用于学习和实践SQL操作的资源,特别适合初学者了解如何在实际环境中创建、查询、更新和删除数据。 在这个实例中,你将找到一个学生成绩管理系统的数据库模型。这样的系统通常...

Global site tag (gtag.js) - Google Analytics