当前位置: 代码迷 >> Sql Server >> sql 记录,该怎么处理
  详细解决方案

sql 记录,该怎么处理

热度:433   发布时间:2016-04-27 11:42:03.0
sql 记录
没怎么接触过MS SQL,目前有个系统的SQL SERVER 效率有点问题,想先从sql上面先优化。
请问下 MS SQL 有没有类似MySQL的慢查询之类的记录有问题的sql,或则sql历史记录的 日志?

定位到sql之后,一般都怎么优化的。(加索引?)

------解决方案--------------------
看你的sql的执行计划
sql查询是否走索引了
------解决方案--------------------
这个是一个大课题,不可能一下子说清楚的,就算一本书都不可能说的很明白,不过你可以用下面的语句来查一下语句的开销。特别关注CPU、逻辑读比较高的那些。
SQL code
SELECT  s2.dbid ,        DB_NAME(s2.dbid) AS [数据库名] ,        --s1.sql_handle ,        ( SELECT TOP 1                    SUBSTRING(s2.text, statement_start_offset / 2 + 1,                              ( ( CASE WHEN statement_end_offset = -1                                       THEN ( LEN(CONVERT(NVARCHAR(MAX), s2.text))                                              * 2 )                                       ELSE statement_end_offset                                  END ) - statement_start_offset ) / 2 + 1)        ) AS [语句] ,        execution_count AS [执行次数] ,        last_execution_time AS [上次开始执行计划的时间] ,        total_worker_time AS [自编译以来执行所用的 CPU 时间总量(微秒)] ,        last_worker_time AS [上次执行计划所用的 CPU 时间(微秒)] ,        min_worker_time AS [单次执行期间曾占用的最小 CPU 时间(微秒)] ,        max_worker_time AS [单次执行期间曾占用的最大 CPU 时间(微秒)] ,        total_logical_reads AS [总逻辑读] ,        last_logical_reads AS [上次逻辑读] ,        min_logical_reads AS [最少逻辑读] ,        max_logical_reads AS [最大逻辑读] ,        total_logical_writes AS [总逻辑写] ,        last_logical_writes AS [上次逻辑写] ,        min_logical_writes AS [最小逻辑写] ,        max_logical_writes AS [最大逻辑写]FROM    sys.dm_exec_query_stats AS s1        CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2WHERE   s2.objectid IS NULLORDER BY last_worker_time DESC
------解决方案--------------------
SQL code
--计算SQL语句执行时间:declare @date1 datetimeset @date1=getdate()你的SQL语句declare @date2 datetimeset @date2=getdate()select datediff(ms,date1,date2)
------解决方案--------------------
--检查阻塞:
EXEC SP_WHO——BLK列中不为0的就是阻塞的SPID
--检查全部活动进程:
EXEC SP_WHO ‘ACTIVE’
--检查某用户当前进程:
EXEC SP_WHO ‘SA’
--检查阻塞的锁信息:
EXEC SP_LOCK SPID的值
--获得阻塞的T-SQL语句:
DBCC INPUTBUFFER (SPIN的值)
--查看锁住表的session_id:
select request_session_id,*
from sys.dm_tran_locks where
resource_associated_entity_id=object_id('[TableName]')
  相关解决方案