按照您在 cmets 中的说明进行标记
“我不能保证我将拥有适当的特权”
您必须在安装程序中编写某种功能,以确保您拥有远程性能的适当权限(可能没有管理员设置权限就无法安装)。计数器访问。
您没有准确说明您要监控的内容,但是,我建议您使用内置的 SQL Server 动态管理视图 (DMV)
MSDN
Good Articles Videos
Very Useful Examples
这些在最近的 SQL Server 版本中变得非常强大,并允许您监控您将在 perfmon 中使用的大多数统计信息(CPU、IO、MEMORY 等等)。也许粒度不如 perfmon,但通常我发现它们比现在的 perfmon 更有用,可以快速获取相关数据。只要您的连接字符串用户具有管理员权限,您就不必担心服务器权限。而且这个功能已经内置在 sql-server 中了 看看看看。
编辑 ...
@Mark 以下是我用来获取数据库 IO 时间的一些 DMV 脚本,虽然不如 PerfMon 精确,但它允许您专注于特定的数据库文件。
查看“dm_io_virtual_file_stats”DMV
select
read_stall_ms = case when num_of_reads = 0 then 0 else (io_stall_read_ms/num_of_reads) end,
write_stall_ms = case when io_stall_write_ms = 0 then 0 else (io_stall_write_ms/num_of_writes) end,
total_stall_ms = case when (num_of_reads = 0 and num_of_writes = 0) then 0 else (io_stall/(num_of_reads + num_of_writes)) end,
db = db_name(vfs.database_id),
mf.physical_name,
vfs.*
from sys.dm_io_virtual_file_stats(null, null) as vfs
join sys.master_files as mf on vfs.database_id = mf.database_id and vfs.file_id = mf.file_id
order by total_stall_ms desc
select m.database_id,
db_name(m.database_id) as database_name,
m.file_id,
m.name as file_name,
m.physical_name,
m.type_desc,
fs.num_of_reads,
fs.num_of_bytes_read,
fs.io_stall_read_ms,
fs.num_of_writes,
fs.num_of_bytes_written,
fs.io_stall_write_ms
from sys.dm_io_virtual_file_stats(NULL, NULL) fs
join sys.master_files m on fs.database_id = m.database_id and fs.file_id = m.file_id
有点花哨的东西......
select db_name(d.database_id) as database_name,
quotename(object_schema_name(d.object_id, d.database_id)) + N'.' + quotename(object_name(d.object_id, d.database_id)) as object_name,
d.database_id,
d.object_id,
d.page_io_latch_wait_count,
d.page_io_latch_wait_in_ms,
d.range_scans,
d.index_lookups,
case when mid.database_id is null then 'N' else 'Y' end as missing_index_identified
from (select
database_id,
object_id,
row_number() over (partition by database_id order by sum(page_io_latch_wait_in_ms) desc) as row_number,
sum(page_io_latch_wait_count) as page_io_latch_wait_count,
sum(page_io_latch_wait_in_ms) as page_io_latch_wait_in_ms,
sum(range_scan_count) as range_scans,
sum(singleton_lookup_count) as index_lookups
from sys.dm_db_index_operational_stats(NULL, NULL, NULL, NULL)
where page_io_latch_wait_count > 0
group by database_id, object_id ) as d
left join (select distinct database_id, object_id from sys.dm_db_missing_index_details) as mid on mid.database_id = d.database_id and mid.object_id = d.object_id