SQL函式惹得禍(SQL SERVER資料庫)
今天早上系統維護後,發現一個庫的CPU奇怪(正常情況下CPU早10到20之間),現在已經在70到90之間了(當然問題,早就出現了,並不是今天早上的偶然事件,因為這個庫沒有安裝監控,所以............)。
檢查阻塞情況,排在前2名的是:
1.CXPACKET
2.SOS_SCHEDULER_YIELD
CXPACKET 出現非常高,90%情況是由於並行查詢引起的(如果再結合PAGEIOLATCH_XX waits等待事件,可以推斷是有可能是進行大表並行查詢,使用了不正確的non-clustered或過時的statistics 引起的,導致錯誤的查詢計劃),但是這裡沒有出現PAGEIOLATCH_XX 。我在這裡保守的調整了MAXDOP 引數:
EXEC sys.sp_configure N'show advanced options', N'1' RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N'max degree of parallelism', N'1'
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sys.sp_configure N'show advanced options', N'0' RECONFIGURE WITH OVERRIDE
GO
,
這時CPU並沒有明顯降低,然後通過以下語句拉出高消耗CPU的SQL語句:
select
highest_cpu_queries.*,q.dbid,
q.objectid, q.number, q.encrypted, q.[text]
from
(select top 50 qs.*
from sys.dm_exec_query_stats qs
order by qs.total_worker_time desc) as highest_cpu_queries
cross apply sys.dm_exec_sql_text(plan_handle) as q
order by highest_cpu_queries.total_worker_time desc
go
一檢視,發現是開發人員寫的SQL有問題。
這是一個很頻繁呼叫的list儲存過程,這個儲存過程的SQL裡面大量使用了系統函式(當然那個表的資料也有點多),導致CPU消耗很高,SQL部分語句如下:
WHERE ISNOTICED = 0 AND (ISNULL(notices, 0) < 6)
AND(@date BETWEEN DATEADD(s, 6, createtime) AND DATEADD(mi, 15, createtime))
ORDER BY CREATETIME desc
當然還有很多,我就不摘錄了。和開發人員一起修改了SQL,問題得到解決。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8183550/viewspace-705609/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server資料庫————模糊查詢和聚合函式SQLServer資料庫函式
- sql server 資料型別轉換函式SQLServer資料型別函式
- Sql Server 資料型別 轉換 函式SQLServer資料型別函式
- Sql Server資料型別轉換函式SQLServer資料型別函式
- Serverless 解惑——函式計算如何訪問 SQL Server 資料庫Server函式SQL資料庫
- SQL SERVER資料庫datediff函式引發的效能問題SQLServer資料庫函式
- Sql Server 日期函式SQLServer函式
- SQL SERVER 字串函式SQLServer字串函式
- Sql Server系列:資料型別轉換函式SQLServer資料型別函式
- SQL Server資料庫安全SQLServer資料庫
- SQL Server 資料庫映象SQLServer資料庫
- SQL Server 資料庫索引SQLServer資料庫索引
- 資料庫映象 (SQL Server)資料庫SQLServer
- 【SQL Server】--SQL Server資料庫bak檔案還原SQLServer資料庫
- SQL Server常用函式整理SQLServer函式
- Sql Server系列:字串函式SQLServer字串函式
- Sql Server系列:聚合函式SQLServer函式
- Sql Server系列:排序函式SQLServer排序函式
- Sql server 分割符函式SQLServer函式
- SQL SERVER 數學函式SQLServer函式
- SQL SERVER 系統函式SQLServer函式
- SQL SERVER 自定義函式SQLServer函式
- SQL Server函式總結SQLServer函式
- SQL Server CONVERT() 函式SQLServer函式
- SQL SERVER 日期和時間資料型別及函式 (Transact-SQL)SQLServer資料型別函式
- SQL Server資料庫中Substring函式的用法例項詳解SQLServer資料庫函式
- Sql Server資料庫開窗函式Over()的使用例項詳解SQLServer資料庫函式
- Sql Server判斷資料庫、表、儲存過程、函式是否存在SQLServer資料庫儲存過程函式
- 【SQL】18 SQL NULL 函式、SQL 通用資料型別、SQL 用於各種資料庫的資料型別SQLNull函式資料型別資料庫
- SQL Server資料庫恢復,SQL Server資料恢復,SQL Server資料誤刪除恢復工具SQLRescueSQLServer資料庫資料恢復
- SQL Server收縮資料庫SQLServer資料庫
- 管理SQL Server資料庫安全SQLServer資料庫
- SQL Server資料庫遷移SQLServer資料庫
- 還原SQL Server資料庫SQLServer資料庫
- sql server跟蹤資料庫SQLServer資料庫
- SQL Server資料庫監控SQLServer資料庫
- 資料庫例項 (SQL Server)資料庫SQLServer
- Sql Server系列:資料庫操作SQLServer資料庫