Sql server 如何比较SQL Server上的数据库I/O负载
我们正在准备将我们的许多SQL服务器迁移到云。我想找到一种逻辑方法,在新的虚拟服务器上重新分配数据库。我想考虑的一个因素是数据库是多么繁忙。我的想法是从dm_io_virtual_stats DMV获取如下所示的信息,以获得一个可以跨服务器进行比较的数字。从本质上讲,它需要读取的字节数和写入的字节数之和除以示例数,以了解自上次启动系统以来每个数据库的平均I/O。我在多台服务器上运行这段代码,所以我希望除以示例,可以对不同的机器进行有效的比较。我读过几篇关于DMV的文章,但没有一篇涉及到这个特定的用例Sql server 如何比较SQL Server上的数据库I/O负载,sql-server,Sql Server,我们正在准备将我们的许多SQL服务器迁移到云。我想找到一种逻辑方法,在新的虚拟服务器上重新分配数据库。我想考虑的一个因素是数据库是多么繁忙。我的想法是从dm_io_virtual_stats DMV获取如下所示的信息,以获得一个可以跨服务器进行比较的数字。从本质上讲,它需要读取的字节数和写入的字节数之和除以示例数,以了解自上次启动系统以来每个数据库的平均I/O。我在多台服务器上运行这段代码,所以我希望除以示例,可以对不同的机器进行有效的比较。我读过几篇关于DMV的文章,但没有一篇涉及到这个特定的
BEGIN
declare @DatabaseId as int
declare @FileId as int
declare @DatabaseStart as datetime2
declare @BytesIn bigint
declare @BytesOut as bigint
declare @BytesOnDisk as bigint
create table #FileInfo (
ServerName varchar(128),
DatabaseName varchar(128),
UpTime bigint,
InputBytes float,
OutputBytes float,
BytesOnDisk bigint )
DECLARE FileCursor CURSOR FOR
select database_id, file_id
from sys.master_files
open FileCursor
FETCH NEXT FROM FileCursor into @DatabaseId, @FileId
WHILE @@FETCH_STATUS = 0
BEGIN
select @BytesIn = num_of_bytes_read,
@BytesOut = num_of_bytes_written,
@BytesOnDisk = size_on_disk_bytes,
@DatabaseStart = sqlserver_start_time
from sys.dm_io_virtual_file_stats(@DatabaseId, @FileId),
sys.dm_os_sys_info
insert into #FileInfo values ( @@SERVERNAME,
db_name(@DatabaseId),
datediff(second, @DatabaseStart, getdate()),
@Bytesin,
@BytesOut,
@BytesOnDisk )
FETCH NEXT FROM FileCursor into @DatabaseId, @FileId
END;
CLOSE FileCursor
DEALLOCATE FileCursor
select ServerName,
DatabaseName,
(SUM((InputBytes + OutputBytes) / UpTime))[AvgBytesPerSec],
SUM(BytesOnDisk)[DatabaseSize]
from #FileInfo
where UpTime > 0
group by ServerName, DatabaseName
order by ServerName, DatabaseName
Drop table #FileInfo
END
GO
考虑添加SUMNUMIFIFICALDSSNUMYOFFX写,因为I/O速率也是一个考虑因素。我认为磁盘性能计数器收集是执行此任务的更好工具,因为自实例启动以来的平均值将隐藏可能需要考虑的活动高峰和低谷。谢谢,Dan。我知道这是一个非常粗略的平均值,特别是如果服务器已经运行了很长时间。我还了解到,sample_ms只是一个int,过了一段时间后变为负数:我在sys.dm_os_sys_info DMV中计算了自sqlserver_启动以来的秒数,以用作分母。