#sql #service #monitoring
#sql #Обслуживание #мониторинг
Вопрос:
Мое приложение подключается к 3 серверам SQL и 5 базам данных одновременно. Мне нужно отображать статусы {running|stopped|not found}
в моей строке состояния.
Есть какая-нибудь идея / пример кода, которые я могу здесь использовать? Этот код не должен влиять на скорость приложения или накладные расходы на SQL server.
Буддхи
Ответ №1:
Я думаю, вам следует использовать WMI (используя класс ServiceController (с этим конструктором). В основном вы запрашиваете сервер, на котором находится sql server, и проверяете его статус.
Приведенный ниже пример предполагает, что ваше приложение написано на c#:
ServiceController sc = new ServiceController("MSSQLSERVER", serverName);
string status = sc.Status.ToString();
Комментарии:
1. Эти SQL-серверы запущены не на моем компьютере, они с серверов в моей локальной сети, я думаю, мы не можем это использовать…
2. Да, вы можете использовать это, даже если службы находятся на других компьютерах. У вас должны быть соответствующие права на компьютере, на котором запущены службы.
3. Вы можете либо использовать олицетворение, либо предоставить разрешения каждому пользователю, от имени которого вам нужно запустить приложение. Взгляните на эту страницу для получения информации о необходимых разрешениях: microsoft.com/resources/documentation/windows/xp/all/proddocs /…
Ответ №2:
«Этот код не должен влиять на скорость приложения или накладные расходы на SQL Server»
Это сценарий Cat Шредингера: чтобы узнать текущее состояние данной удаленной службы или процесса, вы должны сериализовать сообщение в сети, дождаться ответа, десериализовать ответ и действовать в соответствии с ним. Все это потребует некоторой работы и ресурсов со всех задействованных машин.
Однако эта работа может выполняться в фоновом потоке на вызывающем сервере и, если вызывается не слишком часто, может не повлиять на целевые серверы каким-либо измеримым образом.
Вы можете использовать SMO (объекты управления SQL Server) для подключения к удаленному серверу и делать практически все, что вы можете сделать с помощью инструментов администрирования SQL, поскольку они тоже используют SMO для своего волшебства. Это довольно простой API, который в умелых руках может быть очень мощным.
Неудивительно, что SMO требует, чтобы у вас были соответствующие права на ящики, которые вы хотите отслеживать. Если у вас нет / не может быть достаточных прав, вы можете попросить свою дружественную команду SQL amin опубликовать простой канал данных, содержащий некоторые из необходимых вам данных.
ХТХ.
Комментарии:
1. Я надеюсь, что это введено с SQL 2008, к сожалению, я все еще использую SQL 2000.
Ответ №3:
В вашем приложении будут возникать некоторые накладные расходы при подключении (проверке соединения) или при сбое подключения (проверке отсутствия соединения), но вы можете предотвратить время ожидания, проверяя это асинхронно.
Комментарии:
1. Я бы запустил базовый скрипт, такой как SELECT COUNT (ID) ИЗ контактов. Это проверит как подключение к базе данных, так и то, что все разрешения и т.д. По-прежнему в порядке. Накладные расходы будут низкими и могут быть дополнительно сокращены за счет проведения менее частых опросов / проверок.
Ответ №4:
Мы используем следующий SQL-запрос для проверки состояния конкретной базы данных
SELECT 'myDatabase status is:' AS Description, ISNULL((select state_desc FROM sys.databases WITH (NOLOCK) WHERE name ='myDatabase'),'Not Found') AS [DBStatus]
Это должно иметь очень небольшие накладные расходы, особенно в сочетании с лучшими практиками, такими как фоновые или асинхронные потоки
Ответ №5:
Полностью раскрываю, я основатель Cotega
Если вы заинтересованы в сервисе для этого, наш сервис позволяет отслеживать время безотказной работы SQL Server и производительность. Кроме того, вы можете настроить уведомления о недоступности базы данных, снижении производительности, возникновении проблем с размером базы данных или количеством пользователей и т.д.