buffer busy waits

Transcription

buffer busy waits
Überwachung von Oracle-Datenbanken
mit
check_oracle_health
G erha rd L a uß er
ConSol* Software GmbH, München
07.09.08
www.consol.de
Wer bin ich?
Gerhard Laußer
aus München
arbeite bei der Firma ConSol*
„lausser“ im Nagios-Portal
07.09.08
www.consol.de
Oracle?? Hää????
Architekturübersicht
Database
process
SGA
Database
process
Database
Database
process
process
Instance
Database
process
Database
07.09.08
www.consol.de
Oracle?? Hääääää???
SGA
Client
Data
Buffer
Cache
Shared Pool
Library Cache
Redo
Buffer
Dictionary Cache
DBF
07.09.08
RDO
RDO
RDO
www.consol.de
Entstehungsgeschichte
Kundenanforderung mit etlichen Punkten.
Es gab ein paar Oracle-Plugins.
Die deckten nur wenige der Anforderungen ab.
Die unterschieden sich stark bei den Aufrufparametern.
Da sowieso viel zu entwickeln war, musste etwas neues her
Ein Plugin, das alle Anforderungen abdeckt
mit konsistenten Kommandozeilenparametern
mit Performancedaten
mit leicht erweiterbarer Struktur
07.09.08
www.consol.de
Wo bekomme ich es her?
http://www.consol.de/opensource/nagios/check-oracle-health
07.09.08
www.consol.de
Auspacken und Zusammenbauen
tar zxvf check_oracle_health-1.4.0.1.tar.gz
unzip check_oracle_health-1.4.0.1.zip
sh check_oracle_health-1.4.0.1.shar
cd check_oracle_health-1.4.0.1
./configure –help
.....
--libexecdir=DIR
......
--with-nagios-user=USER
--with-nagios-group=GROUP
--with-statefiles-dir=PATH
--with-perl=PATH
program executables [PREFIX/libexec]
set user name to run nagios
set group name to run nagios
sets directory for the state files
(default=/var/tmp/check_oracle_health)
sets path to perl executable
(default= perl im $PATH)
......
Ein funktionierendes DBD::Oracle oder zumindest eine funktionierende Oracle-ClientInstallation muss natürlich auch vorhanden sein.
07.09.08
www.consol.de
So sieht's aus
Der einfachste Fall: ist die Datenbank/Listener erreichbar?
$ check_oracle_health --connect=ora10 --mode=tnsping
OK - connection established to ora10.
Der zweiteinfachste Fall: kann man sich einloggen und wie lange dauert das?
$ check_oracle_health --connect=nagios/oramon@ora10 --mode=connection-time
OK - 0.10 seconds to connect as NAGIOS | connection_time=0.1046;1;5
07.09.08
www.consol.de
Der Connectstring mit Username und Passwort
ausführlich:
check_oracle_health –-connect=<sid> --username=<user> --password=<pass> ...
oder zusammengesetzt:
check_oracle_health –-connect=<username>/<passwort>@<sid> ...
oder mit custom variables in der Servicedefinition:
export NAGIOS__SERVICEORACLE_SID=<sid>
export NAGIOS__SERVICEORACLE_USER=<user>
export NAGIOS__SERVICEORACLE_PASS=<pass>
check_oracle_health ...
07.09.08
# _oracle_sid
# _oracle_user
# _oracle_pass
www.consol.de
Der Connectstring bei „external authentification“
Es geht auch ohne Passwort mit „external authentification“ (z.b. bei SAP):
CREATE USER OPS$SEPP IDENTIFIED EXTERNALLY;
sepp$ export ORACLE_SID=ora10
sepp$ sqlplus /
SQL>
sepp$ check_oracle_health –-connect=<sid> ...
OK - 0.14 seconds to connect as OPS$SEPP | connection_time=0.1422;1;5
07.09.08
www.consol.de
Benötigte Privilegien
create user nagios identified by 'dingsbums';
grant create session to nagios;
grant select any dictionary to nagios;
grant select on V_$SYSSTAT to nagios;
grant select on V_$INSTANCE to nagios;
grant select on V_$LOG to nagios;
grant select on SYS.DBA_DATA_FILES to nagios;
grant select on SYS.DBA_FREE_SPACE to nagios;
07.09.08
www.consol.de
Komponenten des Plugins
Das endgültige Plugin wird aus lauter einzelnen Perl-Modulen zusammengebaut:
Nagios/DBD/Oracle/Server.pm
Nagios/DBD/Oracle/Server/Database.pm
Nagios/DBD/Oracle/Server/Database/Tablespace.pm
Nagios/DBD/Oracle/Server/Database/Tablespace/Datafile.pm
Nagios/DBD/Oracle/Server/Database/Tablespace/Segment.pm
Nagios/DBD/Oracle/Server/Instance.pm
Nagios/DBD/Oracle/Server/Instance/SGA.pm
Nagios/DBD/Oracle/Server/Instance/SGA/DataBuffer.pm
Nagios/DBD/Oracle/Server/Instance/SGA/SharedPool.pm
Nagios/DBD/Oracle/Server/Instance/SGA/SharedPool/DictionaryCache.pm
Nagios/DBD/Oracle/Server/Instance/SGA/SharedPool/LibraryCache.pm
Nagios/DBD/Oracle/Server/Instance/SGA/RollbackSegments.pm
Nagios/DBD/Oracle/Server/Instance/SGA/Latch.pm
Nagios/DBD/Oracle/Server/Instance/SGA/RedoLogBuffer.pm
Nagios/DBD/Oracle/Server/Instance/PGA.pm
Nagios/DBD/Oracle/Server/Instance/Enqueue.pm
Nagios/DBD/Oracle/Server/Instance/Event.pm
Nagios/DBD/Oracle/Server/Instance/Sysstat.pm
Nagios/DBD/Oracle/Server/Instance/Waitevent.pm
07.09.08
www.consol.de
Warum so viele Perl-Module?
Neue Funktionalität soll schnell implementiert werden können.
Man muss sich nicht durch seitenweise Code wühlen.
Eventuell vorhandene (firmenspezifische) Scripts können möglicherweise in einem eigenem
Modul untergebracht werden.
07.09.08
www.consol.de
Nochmal ein Beispiel, bevor's losgeht
Wieviele User sind angemeldet?
Es kann vorkommen, daß Firewalls die Verbindung zum User hin abbrechen, aber die
Datenbank davon nichts mitbekommt.
$ check_oracle_health --mode=connected-users
OK - 38 connected users | connected_users=38;50;100
07.09.08
www.consol.de
Der Parameter --mode
Was genau das Plugin messen/bewerten soll, gibt man mit dem
Kommandozeilenparameter --mode an:
--mode=tnsping
--mode=connected-users
--mode=sga-data-buffer-hit-ratio
--mode=stale-statistics
--mode=tablespace-usage
.....
Sinnvolle Vorschläge sind ausdrücklich erwünscht!
07.09.08
www.consol.de
Kategorien von Checks
Die Modes lassen sich grob einteilen:
Verbindung/Sessions
Performance/Cachehitraten/SGA
Integrität
Tablespaces/Datafiles
IO
Latches/Enqueues
Events/Stats
SQL
07.09.08
www.consol.de
DB-Verbindung / Sessions
$ check_oracle_health --connect=ora10 --mode=tnsping
OK - connection established to ora10.
$ check_oracle_health --connect=nagios/oradbmon@ora10 --mode=connection-time
OK - 0.10 seconds to connect as SYSTEM | connection_time=0.0954;1;5
$ check_oracle_health --connect=nagios/oradbmon@ora10 --mode=connected-users
OK - 21 connected users | connected_users=21;50;100
07.09.08
www.consol.de
Performence / SGA
# das kennt jeder DBA: Data Buffer Cache (Datenblöcke im RAM?)
$ check_oracle_health --mode=sga-data-buffer-hit-ratio
OK - SGA data buffer hit ratio 100.00% | sga_data_buffer_hit_ratio=100.00%;98:;95:
# Bereits geparste SQL Statements
$ check_oracle_health --mode=sga-library-cache-hit-ratio
CRITICAL - SGA library cache hit ratio 86.73% | sga_library_cache_hit_ratio=86.73%;98:;95:
# Bereits verwendete Datenbankobjekte, Tabellen, Spaltennamen
$ check_oracle_health --mode=sga-dictionary-cache-hit-ratio
OK - SGA dictionary cache hit ratio 98.41% | sga_dictionary_cache_hit_ratio=98.41%;95:;90:
# Schutz von Objekten im Speicher vor konkurrierendem Zugriff
$ check_oracle_health --mode=sga-latches-hit-ratio
OK - SGA latches hit ratio 99.97% | sga_latches_hit_ratio=99.97%;98:;95:
07.09.08
www.consol.de
Performance
# Der Shared Pool umfasst den Library Cache, Dictionary Cache,...
check_oracle_health --mode=sga-shared-pool-free
OK - SGA shared pool free 21.48% | sga_shared_pool_free=21.48%;10:;5:
# Objekt wurde gesucht, war nicht vollst. im Lib.Cache und musste neu geladen werden.
check_oracle_health --mode=sga-shared-pool-reloads
OK - SGA shared pool reloads 0.67% | sga_shared_pool_reloads=0.67%;1;10
# Werden die Sort-Operationen im RAM ausgeführt?
check_oracle_health --mode=pga-in-memory-sort-ratio
OK - PGA in-memory sort ratio 100.00% | pga_in_memory_sort_ratio=100.00;99:;90:
# Sind SQL-Statements ohne Reload wiederverwendbar (mehr ? Variable verwenden)
check_oracle_health --mode=soft-parse-ratio
WARNING - Soft parse ratio 97.53% | soft_parse_ratio=97.53%;98:;90:
07.09.08
www.consol.de
Integrität
z.b. Trigger oder PL/SQL referenziert eine Tabelle, die gelöscht wurde
$ check_oracle_health --mode=invalid-objects
CRITICAL - 25 invalid objects | invalid_ind_partitions=0 invalid_indexes=0 invalid_objects=25
Aktuelle Statistiken helfen dem Optimizer.
$ check_oracle_health --mode=stale-statistics
WARNING - 19 objects with stale statistics | stale_stats_objects=19;10;100
07.09.08
www.consol.de
Tablespaces
Mit –mode=list-tablespaces kann man sich einen Überblick verschaffen
$ check_oracle_health --mode=list-tablespaces
SYSAUX
SYSTEM
TEMP
UNDOTBS1
USERS
XD73S_DAT_TAB
OK - have fun
07.09.08
www.consol.de
Tablespaces
$ check_oracle_health --mode=tablespace-usage
OK - tbs XD73S_DAT_TAB usage is 59.51%, tbs USERS usage is 76.82%, tbs UNDOTBS1 usage
is 0.00%, tbs TEMP usage is 0.00%, tbs SYSTEM usage is 2.48%, tbs SYSAUX usage is 1.58% |
'tbs_xd73s_dat_tab_usage_pct'=59%;90;98 'tbs_xd73s_dat_tab_usage'=2975MB;
4500;4900;0;5000 'tbs_xd73s_dat_tab_alloc'=3000MB;;;0;5000 'tbs_users_usage_pct'=76%;
90;98 'tbs_users_usage'=25172MB;29491;32112;0;32767 'tbs_users_alloc'=29547MB;;;0;32767
'tbs_undotbs1_usage_pct'=0%;90;98 'tbs_undotbs1_usage'=0MB;29491;32112;0;32767
'tbs_undotbs1_alloc'=1135MB;;;0;32767 'tbs_temp_usage_pct'=0%;90;98
'tbs_temp_usage'=0MB;29491;32112;0;32767 'tbs_temp_alloc'=588MB;;;0;32767
'tbs_system_usage_pct'=2%;90;98 'tbs_system_usage'=811MB;29491;32112;0;32767
'tbs_system_alloc'=820MB;;;0;32767 'tbs_sysaux_usage_pct'=1%;90;98
'tbs_sysaux_usage'=516MB;29491;32112;0;32767 'tbs_sysaux_alloc'=540MB;;;0;32767
Das ist unübersichtlich und kann sehr leicht länger als 1024 Bytes werden (Schnipp!)
Anm. Mit dem Parameter -3 wird bei > 200 Zeichen das Nagios 3.x Format verwendet.
Wenns unbedingt in einen einzigen Service reinsoll, dann check_multi verwenden.
07.09.08
www.consol.de
Tablespaces
Mit dem Parameter –name kann man einzelne Objekte herauspicken
$ check_oracle_health --mode=tablespace-usage --name=USERS
OK - tbs USERS usage is 76.82% | 'tbs_users_usage_pct'=76%;90;98
'tbs_users_usage'=25172MB;29491;32112;0;32767 'tbs_users_alloc'=29547MB;;;0;32767
$ check_oracle_health --mode=tablespace-usage --name=XD73S_DAT_TAB --warning=50
WARNING - tbs XD73S_DAT_TAB usage is 59.51% | 'tbs_xd73s_dat_tab_usage_pct'=59%;50;98
'tbs_xd73s_dat_tab_usage'=2975MB;2500;4900;0;5000 'tbs_xd73s_dat_tab_alloc'=3000MB;;;
0;5000
07.09.08
www.consol.de
Tablespaces
# Free Space Fragmentation Index. (Nur noch für DICTIONARY managed Tablespaces relevant)
# 100=ideal
check_oracle_health -–mode=tablespace-fragmentation --tablespace=ARSYSTEM
OK - tbs ARSYSTEM fsfi 70.91 | 'tbs_arsystem_fsfi'=70.91;30:;20:;0;100
07.09.08
www.consol.de
Tablespaces
# Ist physical IO gleichmäßig über die Datafiles verteilt?
check_oracle_health –-mode=tablespace-io-balance –tablespace=PERFSTAT
CRITICAL - PERFSTAT datafiles PERFSTAT3.dbf,PERFSTAT2.dbf io unbalanced (106.872241) |
tbs_PERFSTAT_io_cv'=12.94%;50.00;100.00
cv = relative Standardabweichung zum. Je mehr sich die IOs der einzelnen Datafiles vom
Mittelwert entfernen, desto größer wird cv.
Ausschlaggebend für den Exitcode ist nicht Gesamt-cv, sondern die Abweichung des Datafiles,
welches am meisten aus der Reihe tanzt, genauer gesagt das prozentuale Verhältnis der
Abweichung vom Mittelwert im Verhältnis zur Standardabweichung. (im Bsp. 106% Abw. vom
cv)
Es werden nur die Ausreisser unter den Datafiles angezeigt.
Für Alarmierung eher ungeeignet, besser nur zur Langzeitbeobachtung verwenden.
07.09.08
www.consol.de
Tablespaces
# Wie lange noch, bis der Tablespace voll ist?
check_oracle_health –-mode=tablespace-remaining-time --tablespace=SYSLOG
CRITICAL - tablespace SYSLOG will be full in 28 days
'tbs_syslog_days_until_full'=28;90:;30:
Hier kommt noch der Parameter –lookback=<Anzahl von Tagen> zum Tragen. Welcher Zeitraum
wird zur Berechnung herangezogen? (default: 30)
# Dictionary managed Tablespaces
$ check_oracle_health –mode=tablespace-can-allocate-next --name=XD73S_DAT_TAB
OK - tablespace XD73S_DAT_TAB free extents are large enough
Seit längerem sind locally managed Tablespaces der Standard, die sowas automatisch regeln.
07.09.08
www.consol.de
Datafiles
$ check_oracle_health --mode=list-datafiles
XD73S_DAT_TAB.dbf
sysaux01.dbf
system01.dbf
temp01.dbf
undotbs01.dbf
users01.dbf
OK - have fun
07.09.08
www.consol.de
Datafiles
$ check_oracle_health --mode=datafile-io-traffic
OK - users01.dbf: 0.01 IO Operations per Second, undotbs01.dbf: 0.00 IO Operations per
Second, temp01.dbf: 0.00 IO Operations per Second, system01.dbf: 0.00 IO Operations per
Second, sysaux01.dbf: 0.00 IO Operations per Second, XD73S_DAT_TAB.dbf: 0.00 IO
Operations per Second | 'dbf_users01.dbf_io_total_per_sec'=0.01;1000;5000
'dbf_undotbs01.dbf_io_total_per_sec'=0.00;1000;5000
'dbf_temp01.dbf_io_total_per_sec'=0.00;1000;5000
'dbf_system01.dbf_io_total_per_sec'=0.00;1000;5000
'dbf_sysaux01.dbf_io_total_per_sec'=0.00;1000;5000
'dbf_XD73S_DAT_TAB.dbf_io_total_per_sec'=0.00;1000;500
$ check_oracle_health --mode=datafile-io-traffic --name=users01.dbf
OK - users01.dbf: 119.26 IO Operations per Second
|'dbf_users01.dbf_io_total_per_sec'=119.26;1000;5000
Damit lassen sich schöne Graphen malen.
07.09.08
www.consol.de
Rollback Segmente
Segmente im UNDO-Tablespace. Werden benutzt, um Änderungen von Daten wieder rückgängig
zu machen.
check_oracle_health --mode=roll-hit-ratio
OK - Rollback segment hit ratio is 100.00% | rollback_segment_hit_ratio=100.00%;99:;98:
# 100 – waits/gets; Wenn < 99% , dann braucht man mehr Rollbacksegmente
check_oracle_health --mode=roll-header-contention
CRITICAL - Rollback segment header contention is 49.62% |
rollback_segment_header_contention=49.62%;1;2
# mehr Segmente! (außer man verwendet UNDO Tablespaces)
check_oracle_health --mode=roll-block-contention
CRITICAL - Rollback segment block contention is 23.42% |
rollback_segment_block_contention=23.42%;1;2
# größere Segmente!
07.09.08
www.consol.de
Rollback Segmente
check_oracle_health –mode=roll-wraps
OK - Rollback segment wraps 0.00/sec | rollback_segment_wraps=23;1;100
rollback_segment_wraps_rate=0.00;1;100
# größere Segmente verwenden
check_oracle_health --mode=roll-extends
OK - Rollback segment extends 0.00/sec | rollback_segment_extends=10;1;100
rollback_segment_extends_rate=0.00;1;100
Am besten jemanden fragen, der sich damit auskennt...
07.09.08
www.consol.de
Redo Logs
$ check_oracle_health --mode=redo-switch-interval
OK - Last redo log file switch interval was 1781 minutes |
redo_log_file_switch_interval=106882s;600:;60:
$ check_oracle_health --mode=redo-retry-ratio
OK - Redo log retry ratio is 0.000229% | redo_log_retry_ratio=0.000229%;1;10
# LGWR retries : entries; >1% = Redo Log Buffer vergrößern
$ check_oracle_health --mode=redo-io-traffic
OK - Redo log io is 0.000002 MB/sec | redo_log_io_per_sec=0.000002;100;200
07.09.08
www.consol.de
Top 10 aus v$segstat
Gibt es Userprozesse unter den Top10 auf Segment-Ebene?
$ check_oracle_health --mode=seg-top10-logical-reads
WARNING - 5 user processes among the top10 logical reads |
users_among_top10_logical_reads=5;1;9
$ check_oracle_health --mode=seg-top10-physical-reads
WARNING - 7 user processes among the top10 physical reads |
users_among_top10_physical_reads=7;1;9
$ check_oracle_health --mode=seg-top10-buffer-busy-waits
OK - 1 user processes among the top10 buffer busy waits |
users_among_top10_buffer_busy_waits=1;1;9
$ check_oracle_health --mode=seg-top10-row-lock-waits
OK - 1 user processes among the top10 row lock waits |
users_among_top10_row_lock_waits=1;1;9
07.09.08
www.consol.de
Statistiken
In der View v$sysstats sammelt Oracle unzählige Meßwerte
$ check_oracle_health --mode=list-sysstats
286 CCursor + sql area evicted
12 CPU used by this session
11 CPU used when call started
108 CR blocks created
344 bytes received via SQL*Net from client
66 physical write bytes
139 redo blocks written
<- das interessiert mich
189 transaction rollbacks
......
07.09.08
www.consol.de
Statistiken
$ check_oracle_health --mode=sysstat --name=139
OK - 0.375000 redo blocks written/sec | 'redo blocks written_per_sec'=0.375000;10;100 'redo
blocks written'=3
Vorsicht! Die Zahl ist nicht bei allen Oracle-Versionen gleich.
Besser man verwendet den Namen
$ check_oracle_health --mode=sysstat --name="redo blocks written"
OK - 1.000000 redo blocks written/sec | 'redo blocks written_per_sec'=1.000000;10;100 'redo
blocks written'=11
Und wenn der Name viele Ramschzeichen enthält und man sich die Servicedefinition einfach
machen will:
echo „redo blocks written“ | check_oracle_health –mode=encode
redo%20blocks%20written
$ check_oracle_health --mode=sysstat --name=redo%20blocks%20written
OK - 0.468750 redo blocks written/sec | 'redo blocks written_per_sec'=0.468750;10;100 'redo
blocks written'=15
07.09.08
www.consol.de
Events
Wenn ein SQL-Statement ausgeführt wird, wird es gelegentlich unterbrochen und muss warten.
Ein bestimmter „Event“ muss passieren, bevor das Statement weiter ausgeführt werden kann.
$ check_oracle_health –mode=list-background-events
2326919048 da_fi_in_wr Data file init write
1989349184* sg_mm_sl_fo_co_sh SGA: MMAN sleep for component shrink
2161531084 bu_bu_wa buffer busy waits
4078387448 co_fi_pa_wr control file parallel write
3213517201 co_fi_se_re control file sequential read
1729366244 cu_pi_s_wa_on_x cursor: pin S wait on X
506183215 db_fi_sc_re db file scattered read
2652584166 db_fi_se_re db file sequential read
1307477558 db_fi_si_wr db file single write
$ check_oracle_health –mode=list-events
noch viel, viel mehr
.....
in der zweiten Spalte steht ein (eindeutig) verkürzter Name, der alternativ zum langen Namen
angegeben werden kann.
07.09.08
www.consol.de
Events
Beispiel: Wie oft und wie lange wird gewartet, bis ein Datenblock in den Data Buffer geladen
wurde.
$ check_oracle_health --mode=event-waiting --name=bu_bu_wa
OK - buffer busy waits waits 0.001305% of the time |
'buffer busy waits_percent_waited'=0.001305%;0.1;0.5
Die Zeit, die sämtliche Datenbankprozesse mit Warten verbracht haben im Verhältnis zur
verstrichenen Zeit seit dem letzten Lauf.
$ check_oracle_health --mode=event-waits --name=bu_bu_wa
OK - buffer busy waits : 0.005979 waits/sec |
'buffer busy waits_waits_per_sec'=0.005979;10;100
Hardcore-DBAs fragen. Die wissen sicher, auf welche Events man ein Auge haben sollte.
(buffer busy waits, db file scattered read, db file sequential read, free buffer waits, latch free, log buffer space, log file sync,
enqueue, SQL*Net more data from client, SQL*Net more data to client, write complete wait)
07.09.08
www.consol.de
Latches
Latches sind Sperren auf niedriger Ebene, die Speicher und Strukturen vor konkurrierender
Veränderung schützen.
$ check_oracle_health --mode=list-latches|more
000 event range base latch
001 post/wait queue
002 hot latch diags
003 process allocation
004 session allocation
005 session switching
006 process group creation
007 session idle bit
008 client/application info
009 longop free list parent
DBA fragen, welche Latches er beobachten will oder für sämtliche Latches Kurven malen
lassen.
07.09.08
www.consol.de
Latches
$ check_oracle_health --mode=latch-contention --name=214
OK - SGA latch library cache (#214) contention 0.03% | 'latch_214_contention'=0.03%;1;2
'latch_214_gets'=10555
# wie oft wollten Prozesse und konnten nicht (v$latch misses : gets)
# am besten im Zusammenhang mit der absoluten Anzahl von gets sehen.
$ check_oracle_health --mode=latch-waiting --name=214
OK - SGA latch library cache (#214) sleeping 0.000105% of the time |
'latch_214_sleep_share'=0.000105%;0.1;1;0;100
# wie lange mussten Prozesse auf ihren exclusiven Zugriff warten
07.09.08
www.consol.de
Enqueues
Enqueues sind ähnlich wie Latches. Die auf ein Latch wartenden Prozesse kommen rein zufällig
zum Zug (Timer wakeup, retry, spin), Enqueues sind FIFOs.
$ check_oracle_health --mode=list-enqueues
AF
AS
CF
...
Beispiel: TM = Table Lock
$ check_oracle_health --mode=enqueue-contention --name=TM
OK - enqueue TM DML Enqueue: 0.00% of the requests must wait |
'TM_contention'=0.00%;1;10 'TM_requests'=725 'TM_waits'=0
$ check_oracle_health --mode=enqueue-waiting --name=TM
OK - enqueue TM DML Enqueue: waiting 0.0000% of the time |
'TM_ms_waited'=0 'TM_pct_waited'=0.000000%;0.0003333;0.003333
07.09.08
www.consol.de
SQL Statements
Mit –mode=sql lassen sich beliebige SQL-Statements ausführen. Wichtig ist, daß sie ein
numerisches Ergebnis liefern, welches mit den Schwellwerten verglichen werden kann.
Beispiel: in der Tabelle „lzamqdetektoren“ gibt es ein Feld „datumdb“, welches auf den
Zeitpunkt des Inserts des jeweiligen Datensatzes gesetzt wird.
max(datumdb) ist somit die Zeit des letzten Inserts. Es soll gewarnt/alarmiert werden, wenn seit
über 5/15 Minuten keine neuen Daten mehr eingetragen wurden.
SELECT (sysdate - max(datumdb)) * 24 * 60 from lzamqdetektoren
liefert die Minuten seit dem letzten Eintrag.
check_oracle_health –mode=sql --name=select%20nvl%28%28sysdate%20%2D%20max
%28datumdb%29%29%20%2A%2024%20%2A%2060%2C%209999%29%20from
%20lzamqdetektoren –name2=lzamqlast –warning=5 --critical=15
CRITICAL - lzamqlast: 69151.670000 | 'lzamqlast'=69151.670000;5;15
Der Parameter name2 „verschönert“ die Ausgabe. Ohne ihn würde das SQL-Statement
erscheinen.
07.09.08
www.consol.de
War's das?
TODO
Clusterzeugs
Lokale Prozesse
Unterstützung von http://sqlrelay.sourceforge.net/
07.09.08
www.consol.de

Documents pareils