搜尋本站文章

顯示具有 SQL Server Admin 標籤的文章。 顯示所有文章
顯示具有 SQL Server Admin 標籤的文章。 顯示所有文章

2018-02-26

[SQL Server] Fix: File activation failure. Msg 1813 Could not open new database. CREATE DATABASE is aborted.


FOR ATTACH_FORCE_REBUILD_LOG



  • undocumented。
  • 自動重建 Transaction log file 檔案,與 附加 資料庫作業。
  • 但有 Data Loss issue。


正常關閉 SQL Server 時,是可以使用 FOR ATTACH 或 FOR ATTACH_REBUILD_LOG 方式,附加 回該資料庫 與 自動重建 Transaction log file。

若因 意外中斷 SQL Server Service,資料庫 非正常 關閉。

  • 可以嘗試使用 FOR ATTACH_FORCE_REBUILD_LOG 來 自動重建 Transaction log file 檔案,與 附加 資料庫作業。
  • 但必須面對 Data Loss issue!








縮小 Transaction log file ???


  • 恣意用 Task Manager(工作管理員) 結束 SQL Server Service。
  • 砍掉 Transaction log file 檔案。
  • 再用 FOR ATTACH_FORCE_REBUILD_LOG 來 自動重建 Transaction log file  檔案,與 附加 資料庫作業。
  • Data Loss issue 伴隨而來...




Fix: File activation failure. Msg 1813 Could not open new database. CREATE DATABASE is aborted.


Demo environment: 
  • SQL Server 2017 Enterprise Edition.

01. 建立新資料庫: ForceRebuild。

-- figure 01_CREATE DATABASE




02. 建立 2 張資料表:tb_G1_Data, tb_G2_Data。

-- figure 02_CREATE TABLE




03. 各新增 1 筆資料列。


  • 「Autocommit Transactions(自動認可交易)」,自動認可模式是預設的交易管理模式。
  • Autocommit mode is the default transaction management mode。 


-- figure 03_Each table has one record




04. 使用 「Explicit Transactions(外顯交易)」。

  • 新增 3 筆資料列。
  • 但是不執行 Commit Transaction,Without commit the transaction。

-- figure 11_Explicit transaction_Insert 3 rows




05. 執行 SHUTDOWN WITH NOWAIT,立即停止 SQL Server。


  • 模擬意外中斷 SQL Server Service。
  • 或是,用 Task Manager 中斷 SQL Server Service。


WITH NOWAIT 引數

  • 不會對每個資料庫執行CHECKPOINT,立即關閉 SQL Server。
  • 在嘗試終止所有使用者處理序之後,結束 SQL Server。 
  • 當重新啟動伺服器時,會執行未完成的交易之回復作業。


-- figure 12_SHUTDOWN WITH NOWAIT_without performing checkpoint





06. 模擬錯誤:

  • 更改 Transaction log file 檔案名稱。
  • 將該資料庫搬移到新的資料夾。


-- figure 13_ReName_Log_Move_DB_To_New_Location





07. 重新啟動 SQL Server。


08. 觀察資料庫狀態: RECOVERY_PENDING。


  • 因為資料庫的實體檔案已經不存在原來的路徑。


-- figure 14_DB_State_RECOVERY_PENDING




09. 刪除受損的資料庫: ForceRebuild。

-- figure 15_DROP DATABASE




10. 使用 FOR ATTACH,嘗試 附加回該資料庫。


FOR ATTACH 需要下列項目:

  • 所有資料檔案 (MDF 和 NDF) 都必須是可用的。
  • 如果存在多個記錄檔,它們必須全部都是可用的。
  • 如果讀取/寫入資料庫有目前無法使用的單一記錄檔,且在進行附加作業之前,資料庫因為 沒有使用者或開啟的交易 而關閉,則 FOR ATTACH 會自動重建記錄檔並更新主要檔案。 
  • 反之,如果是唯讀資料庫,則會因為無法更新主要檔案而無法重建記錄。 
  • 因此,當您所附加的唯讀資料庫之記錄無法使用時,您必須在 FOR ATTACH 子句中提供記錄檔或檔案。
  • 資料庫快照集中無法指定 FOR ATTACH。


使用 FOR ATTACH  失敗,因為 SQL Server 是使用 非正常 的方式來關閉資料庫。


File activation failure. The physical file name "C:\TSQLDB\ForceRebuild_log.ldf" may be incorrect.

The log cannot be rebuilt because there were open transactions/users when the database was shutdown, 
no checkpoint occurred to the database, or the database was read-only. 

This error could occur if the transaction log file was manually deleted or lost due to a hardware or environment failure.
Msg 1813, Level 16, State 2, Line 3
Could not open new database 'ForceRebuild'. CREATE DATABASE is aborted.


-- figure 21_FOR ATTACH_ERROR_Msg 1813





11. 使用 FOR ATTACH_REBUILD_LOG,嘗試 附加回該資料庫。


FOR ATTACH_REBUILD_LOG 需要下列項目:

  • 正常關閉資料庫。
  • 所有資料檔案 (MDF 和 NDF) 都必須是可用的。
  • 這項作業會中斷記錄備份鏈結。 建議您在作業完成之後執行完整的資料庫備份。
  • 一般而言,如果您要將一個含有大型記錄的讀/寫資料庫複製到其他伺服器,而該伺服器中,因為資料庫副本大部分用在讀取作業或只用在讀取作業,
  • 所以所需的記錄空間比原始資料庫少,在這種情況下,通常就會使用 FOR ATTACH_REBUILD_LOG。
  • 資料庫快照集中無法指定 FOR ATTACH_REBUILD_LOG。


使用 FOR ATTACH_REBUILD_LOG 失敗,因為 SQL Server 是使用 非正常 的方式來關閉資料庫。

-- figure 22_FOR ATTACH_REBUILD_LOG_ERROR_Msg 1813






use FOR ATTACH_FORCE_REBUILD_LOG


01. 使用 undocumented FOR ATTACH_FORCE_REBUILD_LOG ,嘗試 附加回該資料庫。


FOR ATTACH_FORCE_REBUILD_LOG

  • undocumented
  • 成功地 重建 Transaction log file 檔案,完成 附加 資料庫作業。


File activation failure. The physical file name "C:\TSQLDB\ForceRebuild_log.ldf" may be incorrect.

New log file 'C:\SQLData\ForceRebuild_log.ldf' was created.


-- figure 31_undocumented FOR ATTACH_FORCE_REBUILD_LOG_ReBuild




02. 檢視 SQL Server Error Log:


  • New log file 'C:\SQLData\ForceRebuild_log.ldf' was created.
  • Parallel redo is started for database 'ForceRebuild' with worker pool size [2].
  • Parallel redo is shutdown for database 'ForceRebuild' with worker pool size [2].



-- figure 32_SQL Server Error Log




03. 查詢資料表:Data loss issue


  • 原先 Autocommit Transactions 所新增 1 筆,都 遺失不見了!


-- figure 33_Data_loss






使用 SQL Server 中文版本



檔案啟用錯誤。實體檔案名稱 "C:\TSQLDB\ForceRebuild_log.ldf" 可能不正確。
無法重建記錄,因為關閉資料庫時仍有開啟的交易/使用者、資料庫未發生檢查點,或資料庫是唯讀的。

如果手動刪除交易記錄檔,或因硬體或環境失敗而遺失交易記錄檔,就可能發生這種錯誤。
訊息 1813,層級 16,狀態 2,行 19
無法開啟新資料庫 'ForceRebuild'。CREATE DATABASE 已經中止。


01. FOR ATTACH

-- figure 11_FOR ATTACH_錯誤_訊息 1813




02. FOR ATTACH_REBUILD_LOG

-- figure 12_FOR ATTACH_REBUILD_LOG_錯誤_訊息 1813





03. FOR ATTACH_FORCE_REBUILD_LOG

檔案啟用錯誤。實體檔案名稱 "C:\TSQLDB\ForceRebuild_log.ldf" 可能不正確。
已建立新記錄檔 'C:\SQLData\ForceRebuild_log.ldf'。

-- figure 13_undocumented  FOR ATTACH_FORCE_REBUILD_LOG








Sample Code

20180226_FOR_ATTACH_FORCE_REBUILD_LOG

https://drive.google.com/drive/folders/0B9PQZW3M2F40OTk3YjI2NTEtNjUxZS00MjNjLWFkYWItMzg4ZDhhMGIwMTZl?usp=sharing




References

Database Detach and Attach (SQL Server)
https://docs.microsoft.com/en-us/sql/relational-databases/databases/database-detach-and-attach-sql-server

CREATE DATABASE (SQL Server Transact-SQL)
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-database-sql-server-transact-sql

交易記錄檔(transaction log)意外損毀,僅剩下資料檔案可用為例。錯誤訊息:訊息 1813,層級 16,狀態 2 ... 檔案啟動錯誤。實體檔案名稱 "*.ldf" 可能不正確。
http://sharedderrick.blogspot.tw/2010/02/transaction-log-1813-16-2-ldf.html

2017-08-23

[SQL Server] Query version, edition and update level - 版本、版次、編號



查詢 SQL Server 的產品版本、版本編號資訊等,可以使用以下的範例:

-- Simple - SQL Server system and build information
SELECT @@VERSION;

V1: Query SQL Server system and build information

-- V1_SQL Server system and build information
/*
Applies to: SQL Server 2012:
 SERVERPROPERTY('ProductUpdateLevel') 'ProductUpdateLevel', 
 SERVERPROPERTY('ProductBuildType') 'ProductBuildType', 
 SERVERPROPERTY('ProductUpdateReference') 'ProductUpdateReference', 
*/
SELECT @@SERVERNAME 'InstanceName',
 CASE 
      WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '8%' THEN 'SQL Server 2000'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '9%' THEN 'SQL Server 2005'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '10.0%' THEN 'SQL Server 2008'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '10.5%' THEN 'SQL Server 2008 R2'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '11%' THEN 'SQL Server 2012'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '12%' THEN 'SQL Server 2014'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '13%' THEN 'SQL Server 2016' 
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '14%' THEN 'SQL Server 2017'
   ELSE 'unknown' 
 END AS 'SQLServerVersion ', 
  CASE
     WHEN SERVERPROPERTY('IsClustered') = 1 AND SERVERPROPERTY('IsHadrEnabled') = 1 THEN 'Failover Cluster + Availability Groups'
  WHEN SERVERPROPERTY('IsClustered') = 1 THEN 'Failover Cluster'
  WHEN SERVERPROPERTY('IsHadrEnabled') =1 THEN 'Availability Groups'
  ELSE 'unknown' 
  END AS 'High-Availability',
 SERVERPROPERTY('ProductVersion') 'ProductVersion',
 SERVERPROPERTY('ProductLevel') 'ProductLevel',
 SERVERPROPERTY('Edition') 'ProductEdition',
 SERVERPROPERTY('ProductUpdateLevel') 'ProductUpdateLevel', 
 SERVERPROPERTY('ProductBuildType') 'ProductBuildType', 
 SERVERPROPERTY('ProductUpdateReference') 'ProductUpdateReference', 
 DATABASEPROPERTYEX('master','Version') 'DatabaseInternalVersion'
GO


V2: Query SQL Server system and build information

適用於 SQL Server 2017
加上 作業系統平台
使用 SQL Server 2017 新增加的 sys.dm_os_host_info

-- V2_SQL Server system and build information
-- Applies to: SQL Server 2017

SELECT @@SERVERNAME 'InstanceName',
 CASE 
      WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '8%' THEN 'SQL Server 2000'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '9%' THEN 'SQL Server 2005'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '10.0%' THEN 'SQL Server 2008'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '10.5%' THEN 'SQL Server 2008 R2'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '11%' THEN 'SQL Server 2012'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '12%' THEN 'SQL Server 2014'
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '13%' THEN 'SQL Server 2016' 
   WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('ProductVersion')) like '14%' THEN 'SQL Server 2017'
   ELSE 'unknown' 
 END AS 'SQLServerVersion ', 
  CASE
     WHEN SERVERPROPERTY('IsClustered') = 1 AND SERVERPROPERTY('IsHadrEnabled') = 1 THEN 'Failover Cluster + Availability Groups'
  WHEN SERVERPROPERTY('IsClustered') = 1 THEN 'Failover Cluster'
  WHEN SERVERPROPERTY('IsHadrEnabled') =1 THEN 'Availability Groups'
  ELSE 'unknown' 
  END AS 'High-Availability',
   host_distribution 'HostDistribution', host_release 'HostRelease',
 SERVERPROPERTY('ProductVersion') 'ProductVersion',
 SERVERPROPERTY('ProductLevel') 'ProductLevel',
 SERVERPROPERTY('Edition') 'ProductEdition',
 SERVERPROPERTY('ProductUpdateLevel') 'ProductUpdateLevel', 
 SERVERPROPERTY('ProductBuildType') 'ProductBuildType', 
 SERVERPROPERTY('ProductUpdateReference') 'ProductUpdateReference', 
 DATABASEPROPERTYEX('master','Version') 'DatabaseInternalVersion'
FROM sys.dm_os_host_info 
GO

-- SQL Server 2017 RC2 on Windows Server



-- SQL Server 2017 RC2 on CentOS 7



-- SSMS_伺服器屬性_CentOS_7





檢視各個版本回傳的資訊

-- SELECT @@VERSION



-- 010_SQL Server 2008 R2



-- 011_SQL Server 2012 SP1



-- 012_SQL Server 2014_SP1



-- 013_SQL Server 2016_SP1



-- 014_SQL Server 2016 SP1



-- 015_SQL Server 2017 RC2




參考資料

How to determine the version, edition and update level of SQL Server and its components
https://support.microsoft.com/en-us/help/321185/how-to-determine-the-version--edition-and-update-level-of-sql-server-a

查詢 SQL Server 的產品版本、版本編號
http://sharedderrick.blogspot.tw/2011/01/sql-server.html

sys.dm_os_host_info (Transact-SQL)
https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-os-host-info-transact-sql

2017-08-06

[SQL Server] sp_whoisactive: find out long running queries (找出費時、耗資源的查詢) (2)


延續 先前文章:[SQL Server] sp_whoisactive: find out long running queries (找出費時、耗資源的查詢)


補充 常用的範例

-- EX01_sp_WhoIsActive:增加顯示 執行計畫、交易資訊、封鎖資訊等
USE master
GO
EXEC sp_WhoIsActive @get_plans=1, @get_transaction_info=1, @find_block_leaders=1
GO
 
-- EX02_sp_WhoIsActive:增加顯示 執行計畫、交易資訊、封鎖資訊、系統資訊等
USE master
GO
EXEC sp_WhoIsActive @get_plans=1, @get_transaction_info=1, 
 @find_block_leaders=1, @get_task_info=2
GO

-- EX03_sp_WhoIsActive:增加顯示 執行計畫、交易資訊、封鎖資訊、系統資訊、
-- 取得更多關聯的 ad hoc 查詢或 執行預存程序的呼叫程序、
-- 取得此工作階段(Session)上的更多參考資訊
USE master
GO
EXEC sp_WhoIsActive @get_plans=1, @get_transaction_info=1, @find_block_leaders=1,
  @get_task_info=2, @get_outer_command = 1, @get_additional_info = 2
GO



sp_whoisactive 參數說明 2

目前已有24個以上的參數,善用 @help = 1 來查詢使用方式。

參數 說明
@get_outer_command = 1 嘗試取得更多關聯的 ad hoc 查詢或 執行預存程序的呼叫程序
Get the associated outer ad hoc query or stored procedure call, if available
@sort_order ='[blocked_session_count] ASC'
排序
Column(s) by which to sort output, optionally with sort directions. 
Valid column choices:
session_id, physical_io, reads, physical_reads, writes, tempdb_allocations, tempdb_current, CPU, context_switches, used_memory, physical_io_delta, 
reads_delta, physical_reads_delta, writes_delta, tempdb_allocations_delta,  tempdb_current_delta, CPU_delta, context_switches_delta, used_memory_delta, 
tasks, tran_start_time, open_tran_count, blocking_session_id, blocked_session_count,  percent_complete, host_name, login_name, database_name, start_time, login_time
Note that column names in the list must be bracket-delimited. 
Commas and/or white space are not required. 
@get_additional_info = 1
取得此工作階段(Session)上的更多參考資訊。

Get additional non-performance-related information about the session or request text_size, language, date_format, date_first, quoted_identifier, arithabort, ansi_null_dflt_on,  ansi_defaults, ansi_warnings, ansi_padding, ansi_nulls, concat_null_yields_null, transaction_isolation_level, lock_timeout, deadlock_priority, row_count, command_type.

If a SQL Agent job is running, an subnode called agent_info will be populated with some or all of the following: job_id, job_name, step_id, step_name, msdb_query_error (in the event of an error)

If @get_task_info is set to 2 and a lock wait is detected, a subnode called block_info will be populated with some or all of the following: lock_type, database_name, object_id, file_id, hobt_id,  applock_hash, metadata_resource, metadata_class_id, object_name, schema_name.
@help = 1 顯示出可用的參數與說明



sp_whoisactive 使用範例

-- 010_使用help_線上說明



-- 011_get_outer_command=1_ 取得此工作階段(Session)上的更多參考資訊



-- 012_get_outer_command=1_ 取得此工作階段(Session)上的更多參考資訊_2



-- 013_增加顯示:封鎖鏈結、封鎖計數,但沒有排序



-- 014_顯示:封鎖鏈結、封鎖計數,並依據 blocked_session_count 排序



-- 015_取得此工作階段(Session)上的更多參考資訊



-- 016_取得此工作階段(Session)上的更多參考資訊_xml_交易隔離層級



-- 021_顯示 執行計畫、交易資訊、封鎖資訊、系統資訊、取得更多關聯的 ad hoc 查詢或 執行預存程序的呼叫程序、取得此工作階段(Session)上的更多參考資訊



-- 022_延續 021_顯示 執行計畫...



-- 023_延續 021_顯示 執行計畫...


-- 024_延續 021_顯示 執行計畫...


-- 025_延續 021_顯示 執行計畫...




sp_whoisactive 使用範例程式碼(2)



-- EX01-sp_WhoIsActive:線上說明
USE master
GO
EXEC sp_WhoIsActive @help = 1
GO
-- EX02-sp_WhoIsActive: @get_outer_command= 1 , 
-- 嘗試取得更多關聯的 ad hoc 查詢或 執行預存程序的呼叫程序
USE master
GO
EXEC sp_WhoIsActive @get_outer_command = 1
GO


-- EX03-sp_WhoIsActive:增加顯示:封鎖鏈結、封鎖計數,
-- 並依據 blocked_session_count 排序
USE master
GO
EXEC sp_WhoIsActive @find_block_leaders = 1 , 
 @sort_order ='[blocked_session_count] ASC'
GO
-- EX04-sp_WhoIsActive:取得此工作階段(Session)上的更多參考資訊
USE master
GO
EXEC sp_WhoIsActive @get_additional_info = 1
GO


-- EX05-sp_WhoIsActive:
-- 增加顯示 執行計畫、交易資訊、封鎖資訊、系統資訊、
-- 取得更多關聯的 ad hoc 查詢或 執行預存程序的呼叫程序、取得此工作階段(Session)上的更多參考資訊
USE master
GO
EXEC sp_WhoIsActive @get_plans=1, @get_transaction_info=1, @find_block_leaders=1, 
 @get_task_info=2, @get_outer_command = 1, @get_additional_info = 2
GO





參考資料
[SQL Server] sp_whoisactive: find out long running queries (找出費時、耗資源的查詢)
http://sharedderrick.blogspot.tw/2017/07/sql-server-spwhoisactive-find-out-long.html

sp_whoisactive
http://whoisactive.com/

Looking for sp_whoisactive?
http://sqlblog.com/blogs/adam_machanic/archive/2017/07/26/looking-for-sp-whoisactive.aspx

sp_whoisactive Documentation
http://whoisactive.com/docs/

2017-08-05

[SQL Server] Stress testing, SQLQueryStress parameter, 壓力測試, 搭配使用 參數 (2)


延續先前文章:[SQL Server] SQLQueryStress, Stress testing, 壓力測試

本文討論:
SQLQueryStress: 搭配 參數(Parameter),以預存程序(Stored Procedure)、T-SQL 參數(Parameter) 為例

-- 001_SQLQueryStress: 搭配 預存程序(Stored Procedure) 與 參數(Parameter)



-- 002_SQLQueryStress: 搭配 T-SQL 參數(Parameter)




SQLQueryStress: 搭配 參數(Parameter),以預存程序(Stored Procedure)、T-SQL 參數(Parameter) 為例

任務01:SQLQueryStress: 搭配 預存程序(Stored Procedure) 與 參數(Parameter)

-- 010_設定要執行 參數化 程式




-- 011_點選_Parameter_Substitution



-- 012_準備設定_Parameter_Query



-- 013_點選_Database_設定資料庫連線資訊



-- 014_輸入要取出參數值的程式碼



-- 015_點選_Get_Columns



-- 016_下拉_點選_Column



-- 017_已經取得資料行



-- 018_點選_DataType



-- 018_02_預存程序,設定參數



-- 019_SQL_Profiler_錄製_帶入參數值來執行



-- 020_SSMS_觀察執行的預存程序_次數



-- 021_SSMS_觀察執行的預存程序_次數_2



-- 022_SSMS_觀察執行的預存程序_次數_3



-- 023_SSMS_觀察執行的預存程序_次數_4




任務02:SQLQueryStress: 搭配 T-SQL 參數(Parameter) 

-- 100_參數化的查詢式



-- 101_設定_Parameter_Query



-- 102_執行 SQLQueryStress



-- 103_SSMS_參數化_執行次數



-- 104_SSMS_參數化_執行次數_2



-- 105_SSMS_參數化_執行次數_3



-- 106_SQL_Profiler_參數化查詢式_帶入參數





範例程式碼

01-執行預存程序 [CustOrdersDetail],參數:@OrderID

-- 00-執行預存程序 [dbo].[CustOrdersDetail],輸入參數:@OrderID
USE Northwind
GO
EXEC [dbo].[CustOrdersDetail] @OrderID=10248
GO

02-SQLQueryStress 要執行的範例程式碼

-- 01-SQLQueryStress 要執行的範例程式碼
EXEC [dbo].[CustOrdersDetail] @OrderID=10248;

-- 02-在 Parameter Substitution 要執行的範例程式碼
SELECT OrderID FROM Orders;

--
SELECT * FROM [Order Details] WHERE OrderID =10248;

03-Query: Execution count for stored procedure

-- 10-Query: Execution count for stored procedure
-- 查詢 預存程序 的執行次數
USE master
GO
SELECT  DB_NAME(st.dbid) 'DB' ,OBJECT_SCHEMA_NAME(st.objectid,dbid) 'Schema',
 OBJECT_NAME(st.objectid,dbid) 'SP' ,MAX(cp.usecounts) 'ExecutionCount'
 , cp.objtype, cp.cacheobjtype, st.text
FROM sys.dm_exec_cached_plans cp CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) st
WHERE DB_NAME(st.dbid) IS NOT NULL
 AND cp.objtype = 'Proc' AND  DB_NAME(st.dbid) ='Northwind' -- Filter
GROUP BY cp.plan_handle, DB_NAME(st.dbid), OBJECT_SCHEMA_NAME(objectid,st.dbid),
 OBJECT_NAME(objectid,st.dbid), cp.objtype, cp.cacheobjtype,  st.text
ORDER BY MAX(cp.usecounts) DESC
GO

--
SELECT * FROM sys.dm_exec_cached_plans cp CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) st
WHERE DB_NAME(st.dbid) ='Northwind' -- Filter
GO




參考資料

[SQL Server] SQLQueryStress, Stress testing, 壓力測試