Как удаленно собирать счетчики производительности Windows через SQL Server - PullRequest
0 голосов
/ 13 января 2012

Мне бы хотелось, чтобы мое приложение (которое развернуто в тысячах местоположений) могло отслеживать свою собственную среду, в частности серверную часть sql.Когда SQL Server является локальным, это легко сделать, поскольку я могу использовать библиотеку System.Diagnostics и собирать счетчики производительности Windows через нее.Однако, когда сервер SQL удаленный, у меня возникает проблема, поскольку я не могу гарантировать, что мое приложение c # (в данном случае служба Windows) имеет доступ к удаленному серверу SQL Server, ДРУГОЙ, чем тот факт, что я знаю, что он может получить доступ к серверу SQL.

Любые идеи о том, как я могу собрать счетчики производительности Windows с этой машины с помощью SQL?

Один из способов, который я задумал, - это использовать SQL CLR, но, похоже, требуется небезопасный доступ, которыйЯ почти уверен, что не хочу.

Спасибо

Ответы [ 3 ]

4 голосов
/ 14 января 2012

Пометить как вы заявили в комментариях

«Я не могу гарантировать, что у меня будут соответствующие привилегии»

Либо вам нужно написать какую-то функциональность в ваш установщик, который собирается убедиться, что у вас есть надлежащие привилегии (возможно, не будут устанавливаться без привилегий настройки администратора) для удаленного выполнения. счетчики доступа.

Вы не указали, что именно пытались отслеживать, однако я мог бы предложить использовать встроенные динамические представления управления SQL Server (DMV) * ​​1009 *

1012 * MSDN *
Видео хороших статей
Очень полезные примеры

они стали очень надежными в последних выпусках сервера SQL и позволяют вам отслеживать большую часть статистики, с которой вы будете работать в perfmon (CPU, IO, MEMORY и многие другие). Возможно, не такая большая степень детализации, как у perfmon, но обычно я нахожу их более полезными, чем perfmon в наши дни, для быстрых соответствующих данных. И пока пользователь строки подключения имеет права администратора, вам не нужно беспокоиться о привилегиях сервера. И эта функциональность уже встроена в sql-сервер.


Редактировать ... @Mark. Вот некоторые DMV-скрипты, которые я использую для получения времени ввода-вывода в базе данных, не такие точные, как PerfMon, но позволяют сосредоточиться на конкретном файле базы данных.

Проверьте DMV "dm_io_virtual_file_stats"

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
1 голос
/ 27 января 2012

Если вы подписываете свою сборку, вы можете создать логин из сборки, предоставить ей разрешение на уровне сервера для запуска небезопасных сборок и создать сборку из dll. Это позволяет запускать небезопасные сборки без необходимости включать флаг доверия в базу данных.

0 голосов
/ 13 января 2012

Я думаю, что для этого вам нужно что-то более надежное, чем самообкатанный SQL CLR.У MS есть инструмент для точного под названием SCOM.

У меня были очень хорошие результаты в envs с 50 серверами.

Вы собираете множество настраиваемых данных со встроенными отчетами на определенный момент времени, хранилище данныхи оповещения.

хорошая статья в Википедии

technet

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...