![]() |
Jak monitorować MSSQL Server 2000, 2005, 2008... - Printable Version +- Monitoring Serwerów - Forum o monitoringu infrastruktury IT (https://monitoringserwerow.pl) +-- Forum: MONITORING INFRASTRUKTURY IT (https://monitoringserwerow.pl/forumdisplay.php?fid=1) +--- Forum: op5 Monitor i Nagios (https://monitoringserwerow.pl/forumdisplay.php?fid=12) +--- Thread: Jak monitorować MSSQL Server 2000, 2005, 2008... (/showthread.php?tid=75) |
Jak monitorować MSSQL Server 2000, 2005, 2008... - ArturB - 07-31-2019 Jak monitorować serwery MSSQL? Monitoring serwerów Microsoft SQL Server z poziomu linuxa nie jest zadaniem trywialnym. Możemy do niego podejść dwojako, wykonując przez NRPE (Nagios Remote Plugin Extension) jakiś skrypt odpytujący naszą bazę danych, albo sposób który stosujemy – czyli bezpośrednie łączenie się z SQL Serverem przez protokół TDS (Tabular Data Stream). Do tego celu wykorzystamy bibliotekę FreeTDS. Nawiasem mówiąc FreeTDS, poza współprac ą C, działa z językami skryptowymi takimi jak Perl czy PHP. FreeTDS jest dostarczany na licencji GNU LGPL i pozwala łączyć się również z bazami Sybase. FreeTDS dostarcza aplikację tsql KOD: ZAZNACZ CAŁY
Code: tsql { -S servername [-I interface] | -H hostname -p port } Prostym sposobem podłączenia się do serwera w takim przypadku jest KOD: ZAZNACZ CAŁY
Code: $ tsql –H host –p 1433 -U login –P haslo Niestety takie rozwiązanie zadziała jedynie w przypadku użytkownika SQL’owego, jeśli chcemy skorzystać z uwierzytelniania Windows. W tym momencie zwykle pojawia się pierwszy problem, na szczęście do rozwiązania. Chodzi o używaną wersje protokołu. Zwykle niższa wersja TDS pozwala na logowanie, jednak dopiero wersja 7.0 pozwala na uwierzytelnianie Windows, a co za tym idzie np. logowania domenowego. Często domyślna wersja to 4.2 albo 5.0, co skutkuje komunikatem: KOD: ZAZNACZ CAŁY
Code: locale is "en_US.UTF-8" Szybkie rozwiązanie jest dość proste KOD: ZAZNACZ CAŁY
Code: $TDSVER=7.0 tsql –H host –p 1433 –U ‘DOMENA\login’ –P hasło Jeśli jednak planujemy monitoring dużej ilości baz i chcemy utrzymać porządek proponuję skorzystać z /etc/freetds.conf gdzie możemy zdefiniować naszą instancję – także o dynamicznym porcie TCP Wybór odpowiedniej wersji powinien wyglądać następująco: Quote: Schemat naszego pliku może wyglądać następująco KOD: ZAZNACZ CAŁY
Code: [global] albo w przypadku dynamicznego zamiast port KOD: ZAZNACZ CAŁY
Code: instancje = nazwa_instancji Najczęściej używaną metodą do monitorowania SQL Servera jest check_mssql_health. I wyczerpuje ona dużą część potrzebnych sprawdzeń. Metoda dostępna na Nagios Exchange, jak się okazuje dość uniwersalna jeśli chodzi o wersje MSSQL. W pomocy podręcznej wtyczki znajdziemy następujące informacje, które możemy podzielić na grupy: Activity, Memory, Data i T-SQL. Plusem zostały oznaczone te, które udało nam się uruchomić na SQL Server 2000, wszystkie natomiast zostały przez nas uruchomione na nowszych wersjach MSSQL Server. KOD: ZAZNACZ CAŁY
Code: Activity: Ważnym elementem jest jeszcze kwestia uprawnień do Monitoringu. W trakcie wdrożeń systemu op5 uznaliśmy że sugerowane uprawnienia sysadm są zdecydowanie zbyt duże. To co udało się ustalić to, że użytkownik monitoringu potrzebuje uprawnień PUBLIC na wszystkich monitorowanych bazach. Roli na bazach MASTER i MSDB oraz przypisania do: MASTER – Grant view database state to op5, Grant selekt on sys.sysperfinfo to op5, Grant selekt on sys.traces to op5, grant execute on sys.sp_monitor to op5 MSDB – Grant view database state to op5, grant select on dbo.sysjobhistory to op5, grant select on dbo.sysjobs to op5, grant select on dbo.sysjobschedules to op5 Jeśli wydaje nam się że któryś z checków nie działa pomimo takich uprawnień powinno pomóc w ustaleniu sprawcy utworzenie pliki /tmp/check_mssql_health.trace z uprawnieniami zapisu dla użytkownika monitoringu – znajdziemy tam kompletną listę problemów. Postanowiłem rozszerzyć swoją wczorajszą wypowiedź, ponieważ nie przedstawia ona wszystkich parametrów które czasami chcielibyśmy i możemy zmonitorować. W przypadku sprawdzania wydajności MSSQL przychodzi nam z pomocą tabela sys.dm_os_performance_counters. Tabela ta zawiera kolumny object_name, counter_name, instancje_name, cntr_value, cntr_type. O ile nie trudno domyślić się znaczenia czterech pierwszych kolumn to cntr_type słusznie powinno wzbudzić niepokój. Jak rozumieć dziwną wartość którą tam widzimy? Możemy te wartości podzielić na 3 groupy: 1. Wartość bezwzględna – wartości 65792 i 65536 2. Na sekundę – wartość 272696576 3. Countery wymagające podzielenia przez country bazowe (np. Cache Hit Ratio i Cache Hit Ratio Base) – wartości 1073874176 I 537003264. Baza – 1073939712. Gdzie szukać informacji na temat optymalnych wartości tych liczników. Z pomocą przychodzi firma Quest, która opublikowała pewien plakat -www.quest.com/backstage/images/promotion...rfmonance-Poster.pdf Przyjrzyjmy się najważniejszym pozycjom, niekoniecznie dostarczanym przez check_mssql_health. Podejście jest nieco inne nawet już w przypadku ilości rekompilacji na sekundę. Okazuje się bowiem, że pożądana wartość SQL Re-Compilations/sec nie powinna być bezwzględna, a stanowić mniej niż 10% wartości SQL Compilations/sec (obydwa w SQL Statistics). Podobnie ma się sprawa ilości kompilacji która powinna stanowić mniej niż 10% wartości Batch Requests/sec. Liczniki z grupy /sec wymagają jednak dwóch odczytów w jakimś interwale czasowym. Można to tłumaczyć tak, że owszem ich sens jest na sekundę jednak wartość jest bezwzględna od pewnego momentu (niestety nie jestem w stanie stwierdzić czy to np. restart serwera, restart instancji, czy może instalacja instancji) . Kolejnymi licznikami wartymi uwagi są Processes blocked I Logins/sec z obiektu General Statistics. Jednocześnie krotki o object_name Buffer Manager możemy uznać ze najciekawszą z perspektywy monitoringu wydajności część tej tabeli. Liczniki Page writes/sec i Page reads/sec. Znajdziemy tu również licznik Readahead pages/sec, którego wartość nie powinna przekraczać 20% Page Reads/sec. Bezwzględny licznik Page life expectancy który nie powinien być mniejszy niż 300. O czym należy pamiętać przy ustawianiu odpowiednich progów. Podobnie Free pages – nie mniejsze niż 640. Po krótkim spojrzeniu w kod check_mssql_health zauważamy że on również korzysta z tej tabeli i counterów takich jak Lazy writes/sec, czy przykładu trzeciej grupy counterów – Buffer cache hit ratio/Buffer cache hit ratio base. Druga część artykułu opiera się o sprawdzanie zużycia pamięci operacyjnej. Jak już wspomniałem we wcześniejszym artykule counter Total Server Memory który również znajdziemy w tabeli opisywanej wyżej nie jest do końca miarodajny. Nowoczesny system bazodanowy zwykle będzie chciał wykorzystać pamięć jak najoptymalniej, przez co Total i Target Server Memory w większości przypadków będą sobie równe. Więc co możemy tak naprawdę zmierzyć. Odpowiedź znajduje się w poniższych T-SQL. Kolejność odpowiada poziomowi miarodajności otrzymanej wartości. Niestety w zależności od wersji MSSQL prawdopodobnie tylko jeden z 3 transact-sql będzie skutecznie pokazywać poprawną wartość. Co ważne wartość względną, co w dużych wdrożeniach pozwala na ustalenie sensownych progów. KOD: ZAZNACZ CAŁY
Code: select 100*cast((SUM(virtual_address_space_committed_kb)+ KOD: ZAZNACZ CAŁY
Code: select 100*cast((sum(virtual_memory_committed_kb)+sum(awe_allocated_kb)) as real)/ KOD: ZAZNACZ CAŁY
Code: select 100*cast((sum(virtual_memory_committed_kb)+sum(awe_allocated_kb)) as real)/ Tak przygotowany monitoring w połączeniu z check_mssql_health powinien dać nam komplet informacji, które mogą być wartościowe przy monitorowaniu Microsoft SQL Server. |