日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sql2005 性能调校 观察各种资源的使用情况

發布時間:2025/4/16 编程问答 80 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql2005 性能调校 观察各种资源的使用情况 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

查詢某個數據庫內各對象使用內存緩存區資源的統計

CREATE SCHEMA myScript GO CREATE PROC myScript.spBufferUsed @db sysname as DECLARE @sql varchar(8000) SET @sql=' select p.object_id,OBJECT_SCHEMA_NAME(object_id, database_id) as SchemaName,object_name(p.object_id,b.database_id) as objname,p.index_id,buffer_count=count(*) from ' + @db + '.sys.allocation_units a,' + @db + '.sys.dm_os_buffer_descriptors b,' + @db + '.sys.partitions p where a.allocation_unit_id = b.allocation_unit_id and a.container_id = p.hobt_id and b.database_id = db_id('''+@db +''') group by b.database_id,p.object_id, p.index_id order by buffer_count desc' exec(@sql) GOEXEC myScript.spBufferUsed 'Northwind'

?

清空緩存區信息并重新查詢后,觀察緩存區的使用情況

--清空內存緩存區中現有的信息 DBCC DROPCLEANBUFFERS --故意利用查詢記錄,將硬盤信息留在內存緩存區中 select * from adventureWorks.Person.Contact select * from adventureWorks.HumanResources.Employee--利用先前查詢內存緩存區的存儲過程列出使用狀態 exec myScript.spBufferUsed 'AdventureWorks'

?

顯示累計最消耗 CPU 時間的前50個運行計劃

CREATE PROC myScript.spHighestCPUTime AS SELECT TOP 50total_worker_time/1000 AS [總消耗CPU 時間(ms)],execution_count [運行次數],qs.total_worker_time/qs.execution_count/1000. as [平均消耗CPU 時間(ms)],SUBSTRING(qt.text,qs.statement_start_offset/2+1, (case when qs.statement_end_offset = -1 then DATALENGTH(qt.text) else qs.statement_end_offset end -qs.statement_start_offset)/2 + 1) as [使用CPU的語法], qt.text [完整語法],qt.dbid, dbname=db_name(qt.dbid),qt.objectid,object_name(qt.objectid,qt.dbid) ObjectNameFROM sys.dm_exec_query_stats qs cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt ORDER BY total_worker_time DESC

?

清空運行計劃緩存后,重復運行語法,觀察緩存運行計劃被重復使用與消耗時間的紀錄

--查看緩存中的執行計劃已被執行的次數與累計所耗的時間 EXEC myScript.spHighestCPUTime--清空執行計劃內存 --再重新通過相同的存儲過程運行時,可以看到所有的記錄都被清空 DBCC FREEPROCCACHE--重新建立新的存儲過程計劃被重復使用的記錄,查看相關的時間 WHILE 1=1SELECT * FROM AdventureWorks.Person.Contact GO EXEC myScript.spHighestCPUTime

?

顯示累計最常重新編譯的25個運行計劃

CREATE PROC myScript.spListRecompile AS select top 25plan_generation_num,SUBSTRING(qt.text,qs.statement_start_offset/2+1, (case when qs.statement_end_offset = -1 then DATALENGTH(qt.text) else qs.statement_end_offset end -qs.statement_start_offset)/2 + 1) as stmt_executing,qt.text,execution_count,sql_handle,dbid,db_name(dbid) DBName,objectid,object_name(objectid,dbid) ObjectName from sys.dm_exec_query_stats as qsCross apply sys.dm_exec_sql_text(sql_handle) qt where plan_generation_num >1 order by plan_generation_num

?

查詢某個數據庫內各對象使用內存緩存區資源的統計

CREATE PROC myScript.spReusedPlans AS declare @single int, @reused int, @total intselect @single=sum(case(usecounts)when 1 then 1else 0end),@reused=sum(case(usecounts)when 1 then 0else 1end),@total=count(usecounts) from sys.dm_exec_cached_plansselect '只使用過一次的運行計劃的數量(usecounts=1)'= @single, '重復使用的運行計劃的數量(usecounts>1)'= @reused, '重復使用之運行計劃所占比例%'=cast(100.0*@reused / @total as dec(5,2)), '運行計劃總數量'=@total, '只使用過一次的計劃所消耗字節數'=( select sum(cast(size_in_bytes as bigint)) from sys.dm_exec_cached_plans where usecounts = 1) GOEXEC spReusedPlans

?

顯示鎖定與被鎖定之間的鏈狀關系

create proc myScript.spBlockInfo as select t1.resource_type as [信息鎖定類型],db_name(resource_database_id) as [數據庫名],t1.resource_associated_entity_id as [鎖定的對象],t1.request_mode as [等待者需求的鎖定類型],t1.request_session_id as [等待者sid] ,t2.wait_duration_ms as [等待時間] ,(select text from sys.dm_exec_requests as r cross apply sys.dm_exec_sql_text(r.sql_handle) where r.session_id = t1.request_session_id) as [等待者要運行的批處理],(select substring(qt.text,r.statement_start_offset/2+1, (case when r.statement_end_offset = -1 then datalength(qt.text) else r.statement_end_offset end - r.statement_start_offset)/2+1) from sys.dm_exec_requests as rcross apply sys.dm_exec_sql_text(r.sql_handle) as qtwhere r.session_id = t1.request_session_id) as [等待者正要運行的語法],t2.blocking_session_id as [鎖定者sid] ,(select text from sys.sysprocesses as p cross apply sys.dm_exec_sql_text(p.sql_handle) where p.spid = t2.blocking_session_id) as [鎖定者的語法]from sys.dm_tran_locks as t1, sys.dm_os_waiting_tasks as t2 where t1.lock_owner_address = t2.resource_address

?

通過sys.dm_io_pending_io_requests系統查看和sys.dm_io_virtual_file_stats 動態管理函數監控是否有 IO 延遲的狀況

select db_name(i.database_id) db, name,physical_name, io_stall [用戶等待文件完成I/O 的總時間(以毫秒為單位)] ,io_type [I/O 要求的類型],io_pending_ms_ticks [個別IO 在隊列(Pending queue)等待的總時間] from sys.dm_io_virtual_file_stats(NULL, NULL) i join sys.dm_io_pending_io_requests as p on i.file_handle = p.io_handle join sys.master_files m On m.database_id=i.database_id and m.file_id=i.file_id

以sys.dm_exec_query_stats 動態管理查看查詢最耗 IO 資源的 SQL 語法

select --top 5 (total_logical_reads/execution_count) as [平均邏輯讀取次數], (total_logical_writes/execution_count) as [平均邏輯寫入次數], (total_physical_reads/execution_count) as [平均對象讀取次數],Execution_count 運行次數, substring(qt.text,r.statement_start_offset/2+1, (case when r.statement_end_offset = -1 then datalength(qt.text) else r.statement_end_offset end - r.statement_start_offset)/2+1) [運行語法] from sys.dm_exec_query_stats as rcross apply sys.dm_exec_sql_text(r.sql_handle) as qt order by (total_logical_reads + total_logical_writes) Desc

轉載于:https://www.cnblogs.com/50614090/archive/2010/11/18/1881209.html

總結

以上是生活随笔為你收集整理的sql2005 性能调校 观察各种资源的使用情况的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。