sql 记录

小小小小周 2012-06-08 12:03:51
没怎么接触过MS SQL,目前有个系统的SQL SERVER 效率有点问题,想先从sql上面先优化。
请问下 MS SQL 有没有类似MySQL的慢查询之类的记录有问题的sql,或则sql历史记录的 日志?

定位到sql之后,一般都怎么优化的。(加索引?)
...全文
163 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2012-06-08
  • 打赏
  • 举报
回复
这个是一个大课题,不可能一下子说清楚的,就算一本书都不可能说的很明白,不过你可以用下面的语句来查一下语句的开销。特别关注CPU、逻辑读比较高的那些。
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 s2
WHERE s2.objectid IS NULL
ORDER BY last_worker_time DESC
anzhiqiang_touzi 2012-06-08
  • 打赏
  • 举报
回复
看你的sql的执行计划
sql查询是否走索引了
以学习为目的 2012-06-08
  • 打赏
  • 举报
回复
mark!2L的不错
小小小小周 2012-06-08
  • 打赏
  • 举报
回复
目前情况是不知道跑了哪些sql语句,我要的是如何抓取这些sql语句。
Felixzhaowenzhong 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
SQL code


--计算SQL语句执行时间:
declare @date1 datetime
set @date1=getdate()
你的SQL语句
declare @date2 datetime
set @date2=getdate()
select datediff(ms,date1,date2)
[/Quote]



偶也用这个 查执行花费的时间
xiaolongfck 2012-06-08
  • 打赏
  • 举报
回复
--检查阻塞:
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]')
gogodiy 2012-06-08
  • 打赏
  • 举报
回复
--检查阻塞:
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]')
小小小小周 2012-06-08
  • 打赏
  • 举报
回复
没有其他方法了吗。系统用的是sql server 2000的。2楼的代码执行不了


这个问题的目的就是:
找出数据库跑的所有sql,主要想去优化sql。如何做呢。。
  • 打赏
  • 举报
回复

--计算SQL语句执行时间:
declare @date1 datetime
set @date1=getdate()
你的SQL语句
declare @date2 datetime
set @date2=getdate()
select datediff(ms,date1,date2)
小小小小周 2012-06-08
  • 打赏
  • 举报
回复
多谢楼上的,执行你的sql 确实 可以查看到执行的sql,但是连系统自己在"后面" 执行的也出来了,这部分能过滤掉不。能不能再多出执行花费的时间的列?

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧