在SQLServer中检测tempdb磁盘速度对快照隔离级别的性能影响

时间:2018-01-25 10:05:14

标签: sql sql-server performance tempdb

我们将SQL Server与快照隔离级别一起使用。它确实是一个读提交的快照级别。据我所知,在这种情况下,SQLServer使用tempdb中的版本存储。在我们的环境中,tempdb存储在比主数据库更慢的磁盘上。 所以问题是如何检测这种tempdb放置的性能影响。如何与我的同事争论这一点?是否有任何有用的管理观点或计数器?

1 个答案:

答案 0 :(得分:1)

每次更新行时,Snap shot隔离级别绝对正确,SQL Server数据库引擎会在tempdb中存储原始行的副本。反过来,disk latency的效率也很具挑战性。

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/snapshot-isolation-in-sql-server

  • 快照隔离级别不会创建临时表,它会在TempDB
  • 中存储行的副本
  • 数据库引擎从Tempdb
  • 检索rowversion
  • 启用快照隔离级别时,{/ 1}}中的读/写最终会增加

您可以使用此脚本查找数据库的读/写。无论任何隔离级别,您都可以识别每个数据库的总I / O

Tempdb

用于按物理驱动器号显示I / O统计信息:

SELECT name AS 'Database Name'
      ,SUM(num_of_reads) AS 'Number of Read'
      ,SUM(num_of_writes) AS 'Number of Writes' 
FROM sys.dm_io_virtual_file_stats(NULL, NULL) I
  INNER JOIN sys.databases D  
      ON I.database_id = d.database_id
GROUP BY name ORDER BY 'Number of Read' DESC;

用于计算不同数据库驱动器的磁盘延迟

SELECT left(f.physical_name, 1) AS DriveLetter, 
    DATEADD(MS,sample_ms * -1, GETDATE()) AS [Start Date],
    SUM(v.num_of_writes) AS total_num_of_writes, 
    SUM(v.num_of_bytes_written) AS total_num_of_bytes_written, 
    SUM(v.num_of_reads) AS total_num_of_reads, 
    SUM(v.num_of_bytes_read) AS total_num_of_bytes_read, 
    SUM(v.size_on_disk_bytes) AS total_size_on_disk_bytes
FROM sys.master_files f
INNER JOIN sys.dm_io_virtual_file_stats(NULL, NULL) v
ON f.database_id=v.database_id and f.file_id=v.file_id
GROUP BY left(f.physical_name, 1),DATEADD(MS,sample_ms * -1, GETDATE());

希望这有助于

相关问题