got*_*tqn 3 sql-server tempdb sql-server-2019
在本地,我们在READ_COMMITTED
隔离级别下使用 SQL Server 2019 标准版,我想测试一个数据库的执行情况READ_COMMITTED_SNAPSHOT
(Azure 默认值)。
查询存储已启用。
我想记录READ_COMMITED
一周的一些指标(CPU 使用情况、tempdb 使用情况、IO),然后使用READ_COMMITTED_SNAPSHOT
. 然后,如果性能更好(这是我所期望的),则计划如何(如果)扩展资源以激活所有数据库的隔离级别。
我们有记录 CPU 使用情况的工具,但没有记录 tempdb 的工具。我想知道是否有一个查询或实用程序可以用来获取当前 tempdb 使用情况(例如给定时刻的 20-50-70%)并创建此类日志?
我对 tempdb 很感兴趣,因为行版本将存储在那里,并且我担心一些遗留代码和繁重/长时间运行的更新,我可能需要首先重写这些更新才能切换隔离级别。
我正在寻找这些数据,因为有很多遗留代码执行速度很慢并且会阻止其他查询。我有以毫秒为单位执行的新代码,但有时,由于长时间运行的 CRUD 操作和阻塞,它会执行 25 秒以上,这很糟糕。我正在重写此类遗留代码,但有时特定情况会花费我几天的时间,有时甚至几个月。当然,客户不愿意等待......
如果您不想将服务器的所有内容记录到表中,则可以使用一些替代方法。由于您想专门捕获版本存储,因此这些通常可能更有用。
SELECT
SUM(user_object_reserved_page_count)
* 8 / 1024.0 / 1024.0 AS user_objects_gb,
SUM(internal_object_reserved_page_count)
* 8 / 1024.0 / 1024.0 AS internal_objects_gb,
SUM(version_store_reserved_page_count)
* 8 / 1024.0 / 1024.0 AS version_store_gb,
SUM(unallocated_extent_page_count)
* 8 / 1024.0 / 1024.0 AS free_space_gb,
SUM(mixed_extent_page_count)
* 8 / 1024.0 / 1024.0 AS mixed_extent_gb
FROM tempdb.sys.dm_db_file_space_usage;
SELECT
DB_NAME(database_id) AS database_name,
reserved_page_count,
reserved_space_kb
FROM sys.dm_tran_version_store_space_usage;
SELECT
dopc.object_name,
dopc.counter_name,
dopc.instance_name,
dopc.cntr_value
FROM sys.dm_os_performance_counters AS dopc
WHERE dopc.counter_name IN
(
'Longest Transaction Running Time' ,
'Version Store Size (KB)' ,
'Version Cleanup rate (KB/s)' ,
'Version Generation rate (KB/s)'
);
Run Code Online (Sandbox Code Playgroud)
您还可以将 sp_WhoIsActive 记录到表中以捕获查询级别的 tempdb 使用情况,但这不会区分版本存储和临时对象等。