home *** CD-ROM | disk | FTP | other *** search
/ PC Treasures, Inc. / pctreasures.mdf / WINDOWS / adabas / f_0001 / misc / x_wiz.txt < prev   
Text File  |  1999-02-22  |  59KB  |  1,257 lines

  1. 23
  2. ADABAS D   Performanceanalyse und Tuning
  3. _______________________________________________________________
  4. ____________
  5.  
  6. Jochen           Hartmann,          Tel.          030/390903-77
  7. 18.09.95 13:19
  8.  
  9.  
  10.                            ADABAS D
  11.  
  12.                  Performanceanalyse und Tuning
  13.  
  14.  
  15.                            x_wizard
  16.                            x_wiztrc
  17.                            x_wizbit
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24. Vorabversion Rel. 6.1.1
  25. Nur fⁿr internen SAG-Gebrauch
  26. x_wizard  -  Engpa▀analyse der laufenden Adabas-Datenbank
  27.  
  28. AUFRUF
  29.    x_wizard [-t Zeitintervall] [-x] [-p|-a] [-b] [-s] [-D] [-
  30.    L] [-k|-K] [-l Sprache]
  31.  
  32. BESCHREIBUNG
  33.    x_wizard versucht eine Analyse der Bottlenecks des
  34.    aktuellen Datenbanklaufs. Grundlage bilden das DB-
  35.    Monitoring sowie die Datenbankkonsole x_cons. Erkannte
  36.    EngpΣsse werden in Textform ausgegeben, um
  37.    Datenbankadministratoren einen schnellen ▄berblick ⁿber
  38.    m÷gliche Ursachen von Performanceproblemen zu erm÷glichen1.
  39.    Die Analyse kann entweder einmalig erfolgen oder ⁿber die
  40.    Option -t in regelmΣ▀igen ZeitabstΣnden wiederholt werden.
  41.  
  42.    Der Aufruf von x_wizard sollte m÷glichst auf dem
  43.    Datenbankserver erfolgen, da die DB-Konsole x_cons nicht
  44.    remotefΣhig ist. Ist nur ein Remote-Aufruf m÷glich, kann
  45.    lediglich eine Analyse der Monitoring-Daten vorgenommen
  46.    werden. In diesem Fall darf die Option -x nicht genutzt
  47.    werden.
  48.  
  49. VORAUSSETZUNGEN
  50.    -   Adabas D ab Release 6.1.12
  51.    -   Das Datenbankmonitoring mu▀ eingeschaltet sein3 (MONITOR
  52.      ON, erfolgt bei Verwendung der Option -t automatisch, ansonsten
  53.      mittels xquery -S adabas manuell einschalten).
  54. -   Der Connect an die Datenbank erfolgt ⁿber den DEFAULT-Key
  55. in xuser. Ist kein XUSER-File vorhanden, mⁿssen die Connect-
  56. Parameter ⁿber die Shellvariable SQLOPT ⁿbergeben werden.
  57.  
  58. OPTIONEN
  59.    -t Zeitintervall    RegelmΣ▀ige Auswertung nach
  60.                    Zeitintervall Sekunden. Die erste x_wizard-
  61.                    Ausgabe zeigt die Analyse fⁿr die Zeit seit
  62.                    Start des Datenbankmonitorings, alle
  63.                    weiteren Ausgaben beziehen sich auf das
  64.                    zurⁿckliegende Zeitintervall. Die Cache-
  65.                    Hitraten werden fⁿr jedes Intervall neu
  66.                    berechnet.
  67.  
  68.    -x                                 ZusΣtzliche Auswertung
  69.                    der x_cons-Daten. Diese Option kann nur
  70.                    beim Aufruf von x_wizard auf dem
  71.                    Datenbankserver verwendet werden.
  72.  
  73.    -p             Protokollierung der Ergebnisse in der Datei
  74.                    x_wizard.prt
  75.  
  76.    -a             Protokollierung der Ergebnisse in der Datei
  77.                    x_wizard.prt im Append-Modus
  78.  
  79.    -b             Protokollierung der Me▀daten (BinΣrformat)
  80.                    in der Datei x_wizard.bin zur spΣteren
  81.                    Auswertung durch x_wiztrc.
  82.  
  83.    -D             Erzeugung von Protokollfiles yyyymmdd.wiz
  84.                    (Protokoll der Warnungstexte bei Option -p)
  85.                    bzw. yyyymmdd.wbi (Datenfile zur Verwendung
  86.                    durch x_wiztrc bei Option -b). Fⁿr jeden
  87.                    Tag werden neue Files angelegt.
  88.                    Existierende Files werden appended.
  89.  
  90.    -L             Erzeugen eines Lockfiles x_wizard.lck im
  91.                    Adabas-Rundirectory. Fⁿr eine Serverdb kann
  92.                    genau ein x_wizard gelockt werden.
  93.  
  94.    -k             Stoppt ein mit Lockfile gestartetes
  95.                    x_wizard (ohne Neustart).
  96.  
  97.    -K             Stoppt ein mit Lockfile gestartetes
  98.                    x_wizard und startet x_wizard mit den
  99.                    ⁿbrigen Optionen neu.
  100.  
  101.    -s             Keine Ausgabe auf stdout.
  102.  
  103.    -l Sprache     Ausgabe der Warnungstexte in der Sprache
  104.                    Sprache. M÷gliche Werte fⁿr Sprache: e
  105.                    (englisch), d (deutsch, Default).
  106.  
  107. BEMERKUNGEN
  108.    Fⁿr eine routinemΣ▀ige ▄berwachung des Datenbankbetriebs in
  109.    Produktivsystemen ist ein Interall von 15 Minuten
  110.    ausreichend (-t 900), wobei die Protokollierung (-p)
  111.    aktiviert werden sollte, um dem Adabas-Support einen
  112.    ▄berblick ⁿber die DB-AktivitΣten zu erm÷glichen. Sollen
  113.    hingegen gezielt EngpΣsse mit Hilfe des Tools  x_wizbit
  114.    gesucht werden, empfiehlt sich ein Me▀intervall von 30
  115.    Sekunden.
  116.  
  117.    Die erkannten EngpΣsse werden entsprechend ihrer
  118.    Wichtigkeit klassifiziert (I : Info, W1 bis W3:
  119.    Engpa▀warnungen leichten bis schweren Grades). Die
  120.    Klassifizierung der Warnungen bezieht sich auf
  121.    eingeschwungene Applikationen. Warnungen beim Hochfahren
  122.    eines Systems k÷nnen in der Regel ignoriert werden.
  123.  
  124.    Nicht alle Ausgaben von x_wizard mⁿssen zwangslΣufig echte
  125.    EngpΣsse als Ursache haben. So k÷nnen Tablescans in
  126.    bestimmten Situationen sinnvoll sein, lange Laufzeiten von
  127.    Kommandos bei gro▀en Datenmengen zwangslΣufig entstehen
  128.    etc. . Insbesondere beim Verdacht auf schlechte Select-
  129.    Strategien (Rows Read/Rows Qual) wird man um eine genauere
  130.    Vtrace-Analyse nicht herumkommen (x_wizbit).
  131.  
  132. Meldungstexte von x_wizard
  133.  
  134. Niedrige Datacache Hitrate : <Prozentsatz> %
  135.     <Anzahl> Zugriffe, <Anzahl> erfolgreich, <Anzahl> nicht
  136. erfolgreich
  137. Die Trefferquote beim Zugriff auf den Datenbankcache ist zu
  138. niedrig. Bei einer eingeschwungenen DB-Anwendung sollte die
  139. Datacache Hitrate nicht unter 99 % liegen, da ansonsten zu
  140. viele Daten physisch gelesen werden mⁿssen. Kurzzeitig kann es
  141. zu niedrigeren Hitraten kommen, falls z.B. Tabellen erstmals
  142. gelesen werden oder bei wiederholten Tablescans die Tabelle
  143. nicht in 10% des Datacaches pa▀t (nur bei DEFAULT_LRU=YES). Im
  144. Viertelstundenmittel sind Datacache-Hitraten unter 99% zu
  145. vermeiden.
  146. Aktion
  147. Neben einer Vergr÷▀erung des Datacaches (auf Paging-Gefahr im
  148. Betriebssystem achten) sollte die Ursache der hohen
  149. LeseaktivitΣten gesucht werden. HΣufig verursachen einzelne
  150. Kommandos einen hohen Anteil an der gesamten logischen und
  151. physischen LeseaktivitΣt. Eine Vergr÷▀erung des Caches
  152. verlagert die Last lediglich von der Platte auf die CPU, obwohl
  153. z.B. durch einen zusΣtzlichen Index aus einem leseintensiven
  154. Tablescan ein preiswerter Direktzugriff werden k÷nnte (s.
  155. x_wizbit)
  156.  
  157. Niedrige Catalogcache Hitrate : <Prozentsatz> %
  158.     <Anzahl> Zugriffe, <Anzahl> erfolgreich, <Anzahl> nicht
  159. erfolgreich
  160. Die Trefferquote beim Zugriff auf den Catalogcache, in dem die
  161. geparsten SQL-Kommandos verwaltet werden,  ist zu niedrig. Bei
  162. einer eingeschwungenen DB-Anwendung sollte die Catalogcache
  163. Hitrate bei ca. 90% liegen. Werden neue Programmteile oder
  164. Programme gestartet, kann die Hitrate kurzfristig auf sehr
  165. kleine Werte sinken. Sie sollte im Viertelstundenmittel jedoch
  166. nicht unter 85% liegen.
  167. Aktion
  168. Die Gr÷▀e des Catalogcaches sollte ca. 100 Pages pro
  169. Datenbanksession betragen4, was mittels xparam anhand der
  170. Parameter MAXUSERTASKS und CATALOG_CACHE_PAGS ⁿberprⁿft werden
  171. sollte. Der Catalogcache wird von den aktiven DB-Sessions
  172. dynamisch vergr÷▀ert und beim Release wieder freigegeben. Die
  173. aktuell belegten Cachegr÷▀en k÷nnen mittels SHOW USER CONNECTED
  174. ermittelt werden. Sollten Sessions erheblich mehr als 100 Pages
  175. ben÷tigen, so empfiehlt sich mittelfristig eine entsprechende
  176. Vergr÷▀erung des Catalogcaches, falls das Memory des Rechners
  177. dies zulΣ▀t.
  178.  
  179. Niedrige Convertercache Hitrate : <Prozentsatz> %
  180.  
  181.     <Anzahl> Zugriffe, <Anzahl> erfolgreich, <Anzahl> nicht
  182. erfolgreich
  183. Die Trefferquote beim Zugriff auf den Convertercache, in dem
  184. die Zuordnung von logischen zu physikalischen Datenpages
  185. verwaltet wird, ist zu niedrig. Bei einer eingeschwungenen DB-
  186. Anwendung sollte die Convertercache Hitrate bei mindestens 98%
  187. liegen. Da bei dem Zugiff auf Datenpages, die sich nicht im
  188. Datencache befinden, zunΣchst deren physische Position in den
  189. Datendevices im Konverter gesucht werden mu▀, kann es bei zu
  190. kleinem Convertercache hΣufiger zu zusΣtzlichen I/Os kommen.
  191. Aktion
  192. Die Gr÷▀e des Convertercaches sollte ⁿber den xparam-Parameter
  193. CONV_CACHE_PAGES vergr÷▀ert werden.
  194.  
  195. Cache Verdraengungen: <Anzahl> Pages/sec
  196. Es findet eine VerdrΣngung von geΣnderten Pages aus dem
  197. Datencache auf Platte statt, da die von den Applikationen
  198. verwendeten Daten nicht vollstΣndig im Datencache gehalten
  199. werden k÷nnen. Bei ausreichendem Datencache wⁿrde das physische
  200. Schreiben bis zum nΣchsten Savepoint verz÷gert und dann
  201. asynchron erfolgen. CacheverdrΣngungen fⁿhren demgegenⁿber zu
  202. synchronem I/O und sollten m÷glichst vermieden werden. Bei
  203. lΣngeren LadelΣufen (Datenimport) kommt es allerdings fast
  204. zwangslΣufig zu VerdrΣngungserscheinungen, da das importierte
  205. Datenvolumen in der Regel die Gr÷▀e des Caches weit ⁿbersteigt.
  206. Aktion
  207. Vergr÷▀erung des Daten- (und ggf. auch des Converter-) caches.
  208. Insbesondere bei gr÷▀eren Datenimporten sollten die sog.
  209. Bufwriter fⁿr regelmΣ▀ige asynchrone Bufferflushs zwischen den
  210. Savepoints aktiviert werden5  (x_param-Parameter NUM_BUFREADER,
  211. BR_SLEEPTIME, BR_IF_IOCNT_LT). Fⁿr BR_SLEEPTIME und
  212. BR_IF_IOCNT_LT kann dies wΣhrend des laufenden Betriebs mittels
  213. x_cons $DBNAME putparam ... erfolgen.
  214.  
  215. Hohe Lese-Rate (physisch): <Anzahl> Pages pro Kommando
  216.     <Anzahl> Physical Reads , <Anzahl> Kommandos
  217. Die Anwendung enthΣlt Kommandos, die sehr viele physische
  218. Lesezugriffe auf die Datenbank absetzen, da die angeforderten
  219. Daten nicht im Datencache gefunden werden. Wird auf eine
  220. Tabelle zum ersten Mal zugegriffen oder wurde sie lΣngere Zeit
  221. nicht mehr benutzt und daher aus dem Datencache verdrΣngt, so
  222. ist dieses Verhalten unproblematisch.
  223. Aktion
  224. LΣ▀t sich die LeseaktivitΣt nicht aus dem erstmaligen Zugriff
  225. auf eine Tabelle erklΣren, sollte die Gr÷▀e des Datencaches und
  226. die Datacache Hitrate ⁿberprⁿft werden. Au▀erdem ist m÷glichst
  227. auszuschlie▀en, da▀ die von der Anwendung abgesetzten SQL-
  228. Kommandos erheblich mehr Daten lesen, als eigentlich zur
  229. Abarbeitung  ben÷tigt werden (Tablescans oder ungⁿnstige Select-
  230. Strategien, ggf. Vtrace auswerten). Bei Tablescans mu▀ beachtet
  231. werden, da▀ bei DEFAULT_LRU=YES (xparam) nur 10% des Caches fⁿr
  232. die Zwischenspeicherung der Tabelle genutzt wird, so da▀ die
  233. Tabelle eventuell nicht komplett im Cache gehalten werden kann
  234. und beim nΣchsten Scan erneut physisch gelesen werden mu▀.
  235.  
  236. Hohe Lese-Aktivitaet (physisch), <Anzahl> Pages/sec
  237. Es erfolgen sehr viele physische Lesezugriffe auf die
  238. Datenbank, da die von den Applikationen angeforderten Daten
  239. nicht im Datencache gefunden werden. Wird auf Tabellen zum
  240. ersten Mal zugegriffen oder wurden sie lΣngere Zeit nicht mehr
  241. benutzt und daher aus dem Datencache verdrΣngt, so ist dieses
  242. Verhalten unproblematisch.
  243. Aktion
  244. LΣ▀t sich die LeseaktivitΣt nicht aus dem erstmaligen Zugriff
  245. auf Tabellen erklΣren, sollte die Datacache Hitrate ⁿberprⁿft
  246. und der Datencache gegebenenfalls vergr÷▀ert werden. Au▀erdem
  247. ist m÷glichst auszuschlie▀en, da▀ die von der Anwendung
  248. abgesetzten SQL-Kommandos erheblich mehr Daten lesen, als
  249. eigentlich zur Abarbeitung  ben÷tigt werden (Tablescans oder
  250. ungⁿnstige Select-Strategien, ggf. Vtrace auswerten). Bei
  251. Tablescans mu▀ beachtet werden, da▀ bei DEFAULT_LRU=YES
  252. (xparam) nur 10% des Caches fⁿr die Zwischenspeicherung der
  253. Tabelle genutzt wird, so da▀ die Tabelle eventuell nicht
  254. komplett im Cache gehalten werden kann und beim nΣchsten Scan
  255. erneut physisch gelesen werden mu▀.
  256.  
  257. Hohe Schreib-Aktivitaet (physisch), <Anzahl> Pages/sec
  258. Es erfolgen sehr viele physische Schreibzugriffe auf die
  259. Datendevices, da die von den Applikationen verwendeten Daten
  260. nicht vollstΣndig im Datencache gehalten werden k÷nnen.
  261. Daraufhin findet eine VerdrΣngung von Pages aus dem Cache auf
  262. Platte statt. Bei lΣngeren LadelΣufen (Datenimport) kommt es
  263. fast zwangslΣufig zu VerdrΣngungserscheinungen, da das
  264. importierte Datenvolumen in der Regel die Gr÷▀e des Caches weit
  265. ⁿbersteigt.
  266. In regelmΣ▀igen AbstΣnden (Default: 10 Min.) kommt es zudem
  267. beim sog. Savepoint zu einem Flush des Datencaches, bei dem
  268. alle geΣnderten Pages aus dem Cache auf Platte geschrieben
  269. werden, um so einen konsistenten Datenbankzustand auf den
  270. Devices zu erzeugen. Zu diesem Zeitpunkt steigt die I/O-
  271. AktivitΣt stark an (Plattenauslastung nahe 100%), ohne da▀ es
  272. sich dabei um einen echten Engpa▀ handelt. Im Normalbetrieb
  273. sollten au▀erhalb der Savepoints keine nennenswerten
  274. SchreibaktivitΣten gemessen werden k÷nnen.
  275. Aktion
  276. Werden im Normalbetrieb hohe SchreibaktivitΣten beobachtet,
  277. sollte zunΣchst ausgeschlossen werden, da▀ wΣhrend des (ggf. zu
  278. kurzen) Messintervalls ein Savepoint aktiv war. Ansonsten kann
  279. nur eine Vergr÷▀erung des Datencaches die Notwendigkeit zu
  280. Cache-VerdrΣngungen verhindern.
  281.  
  282. Hohe Lese-Rate (virtuell) <Anzahl> Pages pro Kommando
  283.     <Anzahl>  Virtual Reads , <Kommandozahl> Kommandos
  284. Die Anwendung enthΣlt Kommandos, die zu sehr vielen logischen
  285. Lesezugriffen auf den Datenbankcache fⁿhren. Ob es sich dabei
  286. um ein Problem handelt, kann nur anhand des Anwendungsprofils
  287. entschieden werden. EnthΣlt eine Anwendung z.B. zahlreiche
  288. Massenselects mit relativ unspezifischen Where-Bedingungen,
  289. kommt es schnell zu einer gro▀en Anzahl virtueller Reads.
  290. Aktion
  291. Es sollte ⁿberprⁿft werden, ob die von der Anwendung
  292. abgesetzten SQL-Kommandos nicht erheblich mehr Daten lesen, als
  293. eigentlich zur Abarbeitung  ben÷tigt werden (z.B. durch
  294. Tablescans oder ungⁿnstige Select-Strategien, ggf. Vtrace
  295. mittels x_wizbit auswerten).
  296.  
  297. Hohe Parse-Aktivitaet, <Anzahl> Prepares pro Kommando
  298.     <Anzahl> Kommandos (Executes), <Anzahl> Prepares
  299. Die Anzahl von ParsevorgΣngen ist bezogen auf die Gesamtzahl
  300. der ausgefⁿhrten Kommandos sehr hoch. Vor der erstmaligen
  301. Ausfⁿhrung eines SQL-Kommandos mu▀ zunΣchst der SQL-
  302. Kommandostring analysiert (geparst) werden, wobei Adabas u.a.
  303. die m÷glichen Zugriffsstrategien ermittelt und das Kommando in
  304. kompakter Form in der Datenbank ablegt. Bei jeder weiteren
  305. Ausfⁿhrung wird nur noch auf diese internen Informationen
  306. zugegriffen und das Kommando direkt ausgefⁿhrt (executed).
  307. Wurde die Anwendung mittels statischem SQL und Adabas-
  308. Precompiler erstellt, so sorgt der Adabas-Precompiler dafⁿr,
  309. da▀ der Parsevorgang pro Kommando nur ein einziges Mal
  310. stattfindet. Bei Verwendung von dynamischem SQL oder des Call-
  311. Interfaces ist der Entwickler selbst fⁿr die Verwaltung der
  312. Parse- bzw. ExecuteauftrΣge verantwortlich. Hohe Parse-
  313. AktivitΣten im laufenden Betrieb k÷nnen daher auf die fehlende
  314. Implementierung eines Cursor-Caches hindeuten. Beim erstmaligen
  315. Start von Programmen oder Programmteilen ist eine hohe
  316. ParseaktivitΣt normal.
  317. Aktion
  318. Von Datenbankseite ist keine spezifische Aktion m÷glich.
  319.  
  320. Niedrige Hitrate bei Tablescans : <Prozentsatz>%
  321.     <Anzahl> Scans, <Anzahl> Rows Read, <Anzahl> Rows Qual
  322. Bei Tablescans ist das VerhΣltnis zwischen gelesenen und
  323. gefundenen (qualifizierten) SΣtzen schlecht. Dies deutet in
  324. fast allen FΣllen auf eine schlechte Select-Strategie hin, die
  325. entweder durch die Anwendung (fehlende oder unzureichende
  326. Indexe etc.) oder durch ein Problem bei der kostenbasierenden
  327. Select-Optimierung des DB-Kerns verursacht wird. Das
  328. Durchscannen von gro▀en Tabellen kann die Performance des
  329. Gesamtsystems wegen der zahlreichen negativen Auswirkungen
  330. (I/O, ▄berschreiben des Datacaches, CPU-Belastung etc.)
  331. gravierend vermindern.
  332. Aktion
  333. ZunΣchst sollte probiert werden, ob durch einen Neuaufbau der
  334. internen Datenbankstatistiken der Adabas-Optimierer eine
  335. geeignetere Select-Strategie findet und  Tablescans dadurch
  336. vermieden werden. Ein Statistikupdate kann entweder mittels
  337. UPDATE STAT * bzw. UPDATE STAT <tablename> ⁿber xquery o.Σ.
  338. erfolgen oder aus der Betriebssystem-Kommandozeile mit Hilfe
  339. des Tools updcol. Da eventuell sehr gro▀e Datenmengen
  340. untersucht werden mⁿssen, k÷nnen diese Kommandos sehr lange
  341. laufen und sollten (auch wegen m÷glicher Sperrkonflikte)
  342. m÷glichst nicht wΣhrend aktiver Anwendungen ausgefⁿhrt werden
  343. (stopsap r3 - Update Statistics - startsap r3).
  344. Fⁿhrt dies nicht zum Erfolg, sollte das Kommando gesucht
  345. werden, das den Tablescan ausl÷st. Dies geschieht entweder
  346. durch Einschalten geeigneter Traces (Precompiler-Trace durch
  347. SQLOPT=-X, SQL-Trace in R/3) und einer anschlie▀enden Suche
  348. nach langlaufenden Kommandos, bei denen die vom Optimierer
  349. angewandte Select-Strategie mit Hilfe des EXPLAIN-Kommandos
  350. ⁿberprⁿft wird, oder durch Anwendung des Tools x_wizbit auf den
  351. Datenbanktrace.
  352.  
  353. Niedrige Hitrate bei Zugriffen via <Optimizer-Strategie>:
  354. <Prozentsatz> %
  355.     <Anzahl> Zugriffe, <Anzahl> Rows Read, <Anzahl> Rows Qual
  356. Bei der Anwendung einer bestimmten Zugriffsstrategie durch den
  357. Adabas-Optimizer ist das VerhΣltnis zwischen gelesenen und
  358. gefundenen (qualifizierten) SΣtzen schlecht. Es gilt
  359. prinzipiell das unter Niedrige Hitrate bei Tablescans gesagte.
  360. Aktion
  361. ZunΣchst sollte probiert werden, ob durch einen Neuaufbau der
  362. internen Datenbankstatistiken der Adabas-Optimierer eine
  363. geeignetere Select-Strategie findet. Ein Statistikupdate kann
  364. entweder mittels UPDATE STAT * bzw. UPDATE STAT <tablename>
  365. ⁿber xquery oder aus der Betriebssystem-Kommandozeile durch den
  366. Aufruf des Tools updcol erfolgen. Da eventuell sehr gro▀e
  367. Datenmengen untersucht werden mⁿssen, k÷nnen diese Kommandos
  368. sehr lange laufen und sollten (auch wegen m÷glicher
  369. Sperrkonflikte) m÷glichst nicht wΣhrend aktiver Anwendungen
  370. ausgefⁿhrt werden (stopsap r3 - Update Statistics - startsap
  371. r3).
  372. Fⁿhrt dies nicht zum Erfolg, sollte das Kommando gesucht
  373. werden, das die ungⁿnstige Select-Strategie ausl÷st. Dies
  374. geschieht entweder durch Einschalten geeigneter Traces
  375. (Precompiler-Trace durch SQLOPT=-X, SQL-Trace in R/3) und einer
  376. anschlie▀enden Suche nach langlaufenden Kommandos, bei denen
  377. die vom Optimierer angewandte Select-Strategie mit Hilfe des
  378. EXPLAIN-Kommandos ⁿberprⁿft wird, oder durch Anwendung des
  379. Tools x_wizbit auf den Datenbanktrace.
  380.  
  381.  Niedrige Hitrate bei <Deletes/Updates>: <Prozentsatz> %
  382.     <Anzahl> Rows Read, <Anzahl> Rows Qual
  383. Bei Deletes bzw. Updates ist das VerhΣltnis zwischen gelesenen
  384. und geΣnderten SΣtzen schlecht. Bevor bei Updates und Deletes
  385. SΣtze geΣndert bzw. gel÷scht werden k÷nnen, mⁿssen diese zuvor
  386. in der entsprechenden Tabelle lokalisiert werden. Dabei werden
  387. die gleichen Zugriffsstrategien wie beim Select verwendet.
  388. Aktion
  389. ZunΣchst sollte probiert werden, ob durch einen Neuaufbau der
  390. internen Datenbankstatistiken der Adabas-Optimierer eine
  391. geeignetere Select-Strategie findet. Ein Statistikupdate kann
  392. entweder mittels UPDATE STAT * bzw. UPDATE STAT <tablename>
  393. ⁿber xquery oder aus der Betriebssystem-Kommandozeile durch den
  394. Aufruf des Tools updcol erfolgen. Da eventuell sehr gro▀e
  395. Datenmengen untersucht werden mⁿssen, k÷nnen diese Kommandos
  396. sehr lange laufen und sollten (auch wegen m÷glicher
  397. Sperrkonflikte) m÷glichst nicht wΣhrend aktiver Anwendungen
  398. ausgefⁿhrt werden (stopsap r3 - Update Statistics - startsap
  399. r3).
  400. Fⁿhrt dies nicht zum Erfolg, sollte das Kommando gesucht
  401. werden, das die schlechte Hitrate ausl÷st. Dies geschieht
  402. entweder durch Einschalten geeigneter Traces (Precompiler-Trace
  403. durch SQLOPT=-X, SQL-Trace in R/3) und einer anschlie▀enden
  404. Suche nach langlaufenden Update/Delete-Kommandos, oder durch
  405. Anwendung des Tools x_wizbit auf den Datenbanktrace.
  406.  
  407. æPhysical Temp Page WritesÆ hoch : <Pages> pro Kommando
  408.     Eventuell Aufbau grosser Ergebnismengen
  409. Beim Erzeugen temporΣrer Datenbankpages zum Aufbau von
  410. (Zwischen-)Ergebnismengen, z.B. bei Joins, ORDER BY-Kommandos
  411. etc. reicht der Datencache zur Aufnahme der Temp-Pages nicht
  412. aus, so da▀ eine Auslagerung auf Platte erfolgen mu▀. Da diese
  413. Pages im Rahmen der weiteren Verarbeitung des SQL-Kommandos
  414. wieder eingelesen werden mⁿssen, sollte das physische Schreiben
  415. temporΣrer Pages vermieden werden. HΣufig sind Probleme im
  416. Anwendungsdesign (fehlende Indexe etc.) oder im Adabas-
  417. Optimizer die Ursache fⁿr den Aufbau von Ergebnismengen. Der
  418. Aufbau gro▀er Ergebnismengen kann die Performance des
  419. Gesamtsystems wegen der zahlreichen negativen Auswirkungen
  420. (I/O, ▄berschreiben des Datacaches, CPU-Belastung etc.)
  421. gravierend vermindern.
  422. Aktion
  423. ZunΣchst sollte probiert werden, ob durch einen Neuaufbau der
  424. internen Datenbankstatistiken der Adabas-Optimierer eine
  425. geeignetere Select-Strategie findet und der Aufbau gro▀er
  426. Ergebnismengen damit vermieden wird. Ein Statistikupdate kann
  427. entweder mittels UPDATE STAT * bzw. UPDATE STAT <tablename>
  428. ⁿber xquery o.Σ. oder aus der Betriebssystem-Kommandozeile mit
  429. Hilfe des Tools updcol erfolgen. Da eventuell sehr gro▀e
  430. Datenmengen durchsucht werden mⁿssen, k÷nnen diese Kommandos
  431. sehr lange dauern und sollten (auch wegen m÷glicher
  432. Sperrkonflikte) m÷glichst nicht bei laufender Anwendung
  433. ausgefⁿhrt werden.
  434. Fⁿhrt dies nicht zum Erfolg, mu▀ versucht werden, das Kommando
  435. zu finden, das den Ergebnismengenaufbau ausl÷st. Dies erfolgt
  436. am einfachsten durch Einschalten geeigneter Traces (Precompiler-
  437. Trace durch SQLOPT=-X, SQL-Trace in R/3) und einer
  438. anschlie▀enden Suche nach langlaufenden Kommandos, bei denen
  439. die vom Optimierer angewandte Select-Strategie mit Hilfe des
  440. EXPLAIN-Kommandos ⁿberprⁿft wird (Result is copied).
  441.  
  442. Hohe Kollisionsrate auf SQL-Sperren, <mittl. Anzahl> pro
  443. Schreibtransaktion
  444.     <Anzahl> Schreibtransaktionen, <Anzahl> SQL-Kollisionen
  445. Es kommt bei einem hohen Prozentsatz von Schreibtransaktionen6
  446. zu Sperren auf SQL-Objekten (Zeilen, Tabellen). Dadurch
  447. entsteht in der Anwendung ein Wartezustand, bis die sperrende
  448. Anwendungstask die Sperre mittels COMMIT freigibt. In der Regel
  449. liegt das Problem eher im Anwendungsdesign als in der
  450. Datenbank, doch kann es bei sehr hohen Sperrzahlen zu einem CPU-
  451. Bottleneck auf der Adabas-Lockliste kommen. Adabas versucht,
  452. sperrende Tasks innerhalb des Datenbankkerns mit h÷herer
  453. PrioritΣt auszufⁿhren, falls diese Sperren von anderen Sessions
  454. angefordert werden (die sich dann im Vwait befinden), um so den
  455. Aufbau von Warteschlangen vor SQL-Sperrobjekten zu vermeiden.
  456. Aktion
  457. Die Anwendung sollte daraufhin ⁿberprⁿft werden, ob sie sich
  458. fⁿr den Isolation Level 0 (dirty read) eignet, um so
  459. Lesesperren zu vermeiden (SAP R/3 lΣuft bereits im Isolation
  460. Level 0). Ferner sollte ⁿberprⁿft werden, ob der Zeitraum
  461. zwischen dem Ziehen der Sperre und dem Commit verringert werden
  462. kann (keine Sperren wΣhrend Dialog-Sessions halten!). Treten im
  463. Multiuser-Betrieb hΣufiger hohe Kollisionsraten auf, kann in
  464. xparam der Parameter PRIO_TASK auf den Wert 203 (bei MAXCPU > 1
  465. auf 207) gesetzt werden, wodurch comittende Transaktionen
  466. priorisiert werden.
  467. Ein weiterer Engpa▀ kann im Log-Schreiben bestehen, da erst
  468. nach erfolgreichem physischem Log-I/O des Commits die SQL-
  469. Sperren der entsprechenden Transaktion freigegeben werden
  470. k÷nnen. Daher ist es sinnvoll, den Log auf m÷glich schnelle
  471. Devices zu legen. Anhand der maximalen LΣnge der Log Queue
  472. (Monitoring) kann  festgestellt werden, ob es beim Schreiben
  473. des Logs zeitweise zu EngpΣssen kommt.
  474. Im R/3-Umfeld ist ein drastischer Anstieg der SQL-Kollisionen
  475. zu beobachten, wenn R/3-Applikationsserver CPU- oder Memory-
  476. bound werden. Insbesondere steigen in diesem Fall die
  477. Kollisionen auf den Tabellen NRIV und GLT0, da die Applikation
  478. die sperraufl÷senden Commits nicht schnell genug an die
  479. Datenbank schickt. Bei hohen Kollisionsraten sollte daher in
  480. jedem Fall ⁿberprⁿft werden, ob R/3 nicht in einen Engpa▀
  481. gelaufen ist (wait time mittels Transaktion /nst03 ⁿberprⁿfen).
  482.  
  483. Hohe Wartezeiten bei SQL-Kollisionen: <Dauer> Sek pro Vwait
  484. (<Anzahl> Vwaits)
  485. Bei Kollisionen auf  SQL-Objekten ist die Wartezeit auf die
  486. Freigabe der SQL-Sperre sehr hoch. Eine SQL-Sperre wird von der
  487. sperrenden Applikation durch das Commit freigegeben. Daher
  488. liegt die Ursache fⁿr hohe Wartezeiten hΣufig in zu langen
  489. Transaktionen, bei denen von der Applikation eine SQL-Sperre
  490. ⁿber einen lΣngeren Zeitraum gehalten wird. Daneben treten
  491. lange Wartezeiten auch dann auf, wenn viele Applikationen das
  492. gleiche Objekt sperren wollen, da es in diesem Fall zu einer
  493. Queue vor der entsprechenden SQL-Sperre kommen kann. Infolge
  494. einer Sequentialisierung wird diese Warteschlange hΣufig nur
  495. langsam abgebaut (insbesondere bei Multi-CPU-Systemen). Adabas
  496. versucht daher, sperrende Tasks innerhalb des Datenbankkerns
  497. mit h÷herer PrioritΣt auszufⁿhren, falls deren Sperren von
  498. anderen Sessions angefordert werden (die sich dann im Vwait
  499. befinden), um so den Aufbau von Warteschlangen vor SQL-
  500. Sperrobjekten zu vermeiden. Die aktuelle Sperrsituation kann im
  501. laufenden Betrieb mittels SHOW STATISTICS LOCK abgefragt
  502. werden.
  503. Aktion
  504. Die Anwendung sollte daraufhin ⁿberprⁿft werden, ob sie sich
  505. fⁿr den Isolation Level 0 (dirty read) eignet, um so
  506. Lesesperren zu vermeiden (SAP R/3 lΣuft bereits im Isolation
  507. Level 0). Ferner sollte ⁿberprⁿft werden, ob der Zeitraum
  508. zwischen dem Ziehen der Sperre und dem Commit verringert werden
  509. kann (keine Sperren wΣhrend Dialog-Sessions halten!). Beim
  510. Autreten von Warteschlangen vor SQL-Objekten sollte die
  511. Applikation daraufhin ⁿberprⁿft werden, ob nicht z.B. durch
  512. einen Splitt von Tabellen gleichzeitige Locks auf dieselbe
  513. Zeile vermieden werden k÷nnen. In xparam kann der Parameter
  514. PRIO_TASK auf den Wert 207 gesetzt werden, wodurch zusΣtzlich
  515. comittende Transaktionen priorisiert werden.
  516. Im R/3-Umfeld ist ein drastischer Anstieg der SQL-Kollisionen
  517. zu beobachten, wenn R/3-Applikationsserver CPU- oder Memory-
  518. bound werden. Insbesondere steigen in diesem Fall die
  519. Kollisionen auf den Tabellen NRIV und GLT0 an, da R/3 die
  520. sperraufl÷senden Commits nicht schnell genug an die Datenbank
  521. schickt. Bei hohen Kollisionsraten sollte daher in jedem Fall
  522. ⁿberprⁿft werden, ob R/3 nicht in einen Engpa▀ gelaufen ist
  523. (Transaktion /nst03).
  524.  
  525. Warteschlange bei SQL-Kollisionen: Coll/Vwait = <VerhΣltnis>
  526.     <Anzahl> Lock List Collisions, <Anzahl> Vwaits
  527. Es treten Warteschlangen vor SQL-Sperren auf, d.h. es wartet
  528. mehr als eine Task auf die Freigabe dieser Sperre. Eine SQL-
  529. Sperre wird von der sperrenden Applikation durch das Commit
  530. freigegeben. Daher liegt die Ursache fⁿr Queuebildungen hΣufig
  531. in zu langen Transaktionen, bei denen von der Applikation eine
  532. SQL-Sperre ⁿber einen lΣngeren Zeitraum gehalten wird. Infolge
  533. von Sequentialisierungserscheinungen werden Warteschlangen
  534. hΣufig nur langsam abgebaut (insbesondere bei Multi-CPU-
  535. Systemen). Adabas versucht daher, sperrende Tasks innerhalb des
  536. Datenbankkerns mit h÷herer PrioritΣt auszufⁿhren, falls deren
  537. Sperren von anderen Sessions angefordert werden (die sich dann
  538. im Vwait befinden), um damit den Aufbau von Warteschlangen vor
  539. SQL-Sperrobjekten zu vermeiden. Die aktuelle Sperrsituation
  540. kann im laufenden Betrieb mittels SHOW STATISTICS LOCK
  541. abgefragt werden.
  542. Aktion
  543. Die Anwendung sollte daraufhin ⁿberprⁿft werden, ob sie sich
  544. fⁿr den Isolation Level 0 (dirty read) eignet, um so
  545. Lesesperren zu vermeiden (SAP R/3 lΣuft bereits im Isolation
  546. Level 0). Ferner sollte ⁿberprⁿft werden, ob der Zeitraum
  547. zwischen dem Ziehen der Sperre und dem Commit verringert werden
  548. kann (keine Sperren wΣhrend Dialog-Sessions halten!). Die
  549. Anwendungslogik sollte m÷glichst so geΣndert werden, da▀
  550. gleichzeitige Locks auf dieselbe Zeile vermieden werden. In
  551. xparam kann der Parameter PRIO_TASK  auf den Wert 203 (bei
  552. MAXCPU >1 auf 207) gesetzt werden, wodurch zusΣtzlich
  553. comittende Transaktionen priorisiert werden.
  554. Im R/3-Umfeld ist ein drastischer Anstieg der SQL-Kollisionen
  555. zu beobachten, wenn R/3-Applikationsserver CPU- oder Memory-
  556. bound werden. Insbesondere steigen in diesem Fall die
  557. Kollisionen auf den Tabellen NRIV und GLT0 an, da R/3 die
  558. sperraufl÷senden Commits nicht schnell genug an die Datenbank
  559. schickt. Bei hohen Kollisionsraten sollte daher in jedem Fall
  560. ⁿberprⁿft werden, ob R/3 nicht in einen Engpa▀ gelaufen ist
  561. (Transaktion /nst03).
  562.  
  563. Lock Eskalationen (<Anzahl> Tabellensperren)
  564. Die Anzahl von SQL-Satzsperren auf eine Tabelle durch eine
  565. Transaktion hat einen Schwellwert ⁿberschritten, so da▀ die
  566. Einzelsatzsperren in eine Tabellensperre umgewandelt wurden. In
  567. der Regel werden SQL-Sperren auf einzelne SΣtze einer Tabelle
  568. gesetzt. Da die Verwaltung von Einzelsatzsperren mit
  569. zunehmender Anzahl teurer wird und nur eine beschrΣnkte Zahl
  570. von Sperren in der DB-Lockliste verwaltet werden k÷nnen, wird
  571. ab einem konfigurierbaren Schwellwert versucht, die Tabelle
  572. exklusiv fⁿr die entsprechende Transaktion zu sperren. Als
  573. Nachteil mu▀ dabei in Kauf genommen werden, da▀ bis zum Commit
  574. andere Transaktionen in dieser Tabelle keine SΣtze mehr sperren
  575. k÷nnen.
  576. Aktion
  577. Die maximale Anzahl von Einzelsatzsperren, die von der
  578. Datenbank verwaltet werden k÷nnen, kann ⁿber den xparam-
  579. Parameter MAXLOCKS konfiguriert werden. Die Eskalation wird
  580. versucht, wenn eine Task mehr als 0,1*MAXLOCKS
  581. Einzelsatzsperren auf einer Tabelle hΣlt. Bei hΣufigerem
  582. Auftreten von unerwⁿnschten Eskalationen sollte der
  583. Parameterwert erh÷ht werden (max. 2,3 Mio.). Ob
  584. Lockeskalationen zum Problem werden, hΣngt sehr stark von der
  585. jeweiligen Anwendung ab. Treten Lockeskalationen auf, sollte
  586. die Anwendung daraufhin untersucht werden, ob
  587. ─nderungstransaktionen, die sehr viele SΣtze sperren, nicht
  588. durch zwischenzeitliche Commits entzerrt werden k÷nnen.
  589. In R/3 kann es insbesondere bei Batch Inputs zu Eskalationen
  590. auf den Tabellen APQD und APQI kommen.
  591.  
  592. Log Queue Overflows (<Anzahl>), Parameter æLOG_QUEUE_PAGESÆ
  593. (<Pagezahl>) zu klein
  594. Die Queue zur Aufnahme von LogeintrΣgen ist ⁿbergelaufen. Beim
  595. Schreiben von LogeintrΣgen durch ─nderungstransaktionen werden
  596. die LogeintrΣge zunΣchst in einer Queue zwischengespeichert,
  597. bevor sie vom sog. Logwriter auf das Logdevice geschrieben
  598. werden. In der Regel besteht diese Queue nur aus einer einzigen
  599. Page, doch kann es insbesondere bei Massenkommandos
  600. (Massendeletes, Array-Inserts etc.) vorkommen, da▀ kurzfristig
  601. wesentlich mehr LogeintrΣge erzeugt werden, als gleichzeitig
  602. physisch auf die Platte geschrieben werden k÷nnen. Kommt es zum
  603. ▄berlauf der Log Queue, so k÷nnen keinerlei LogauftrΣge mehr
  604. angenommen werden, was innerhalb kⁿrzester Zeit zu zahlreichen
  605. DB-internen Wartesituationen (Vsuspend) fⁿhrt. Da
  606. Transaktionen, die LogeintrΣge schreiben, SQL-Sperren halten,
  607. werden damit auch andere Transaktionen behindert.
  608. Aktion
  609. Der xparam-Parameter LOG_QUEUE_PAGES sollte erh÷ht werden (Max.
  610. 200). Au▀erdem sollte ⁿberprⁿft werden, ob die Logdevices nicht
  611. auf schnellere Platten gelegt werden k÷nnen, um damit das
  612. physische Log-I/O zu beschleunigen.
  613.  
  614. æLog Queue PagesÆ zu klein : Total <Pages> , Max. Used <Pages>
  615. Die Queue zur Aufnahme von LogeintrΣgen ist vermutlich zu
  616. klein. Beim Schreiben von LogeintrΣgen durch
  617. ─nderungstransaktionen werden die LogeintrΣge zunΣchst in einer
  618. Queue zwischengespeichert, bevor sie vom sog. Logwriter auf das
  619. Logdevice geschrieben werden. In der Regel besteht diese Queue
  620. nur aus einer einzigen Page, doch kann es insbesondere bei
  621. Massenkommandos (Massendeletes, Array-Inserts etc.) vorkommen,
  622. da▀ kurzfristig wesentlich mehr LogeintrΣge erzeugt werden, als
  623. gleichzeitig physisch auf die Platte geschrieben werden k÷nnen.
  624. Kommt es zum ▄berlauf der Log Queue, so k÷nnen keinerlei
  625. LogauftrΣge mehr angenommen werden, was innerhalb kⁿrzester
  626. Zeit zu zahlreichen DB-internen Wartesituationen (Vsuspend)
  627. fⁿhrt. Da Transaktionen, die LogeintrΣge schreiben, SQL-Sperren
  628. halten, werden damit auch andere Transaktionen behindert.
  629. Aktion
  630. Obwohl es bisher noch nicht zu ▄berlΣufen der Log-Queue
  631. gekommen ist, sollte mittelfristig der xparam-Parameter
  632. LOG_QUEUE_PAGES erh÷ht werden. Au▀erdem sollte ⁿberprⁿft
  633. werden, ob die Logdevices nicht auf schnellere Platten gelegt
  634. werden k÷nnen, um damit das physische Log-I/O zu beschleunigen.
  635.  
  636. Hohe Log-Aktivitaet, <Pages> Pages/sec
  637. Die Anzahl der pro Zeiteinheit geschriebenen Logpages liegt
  638. sehr hoch. Je nach LeistungsfΣhigkeit der aktuellen Logplatten
  639. besteht die Gefahr, da▀ das physische Schreiben des Logs zum
  640. Engpa▀ wird. Da zu jedem Commit auch bei nicht gefⁿllter 4KB-
  641. Logpage diese auf Platte geschrieben werden mu▀, kann es bei
  642. vielen kurzen ─nderungstransaktionen vorkommen, da▀ eine
  643. Logpage mehrmals hintereinander physisch geschrieben wird. In
  644. einem Multiusersystem wird von Adabas versucht, die Commits
  645. mehrerer Anwendungstasks zu sog. Group Commits
  646. zusammenzufassen.
  647. Aktion
  648. Falls die gemessene I/O-Rate an der Leistungsgrenze der
  649. Logplatten liegt, sollte ⁿber den Wechsel des Logs auf
  650. schnellere Platten nachgedacht werden. Bei Anwendungsprogrammen
  651. mit sehr vielen kurzen parallelen Schreibtransaktionen kann
  652. versucht werden, die Anzahl der Group Commits ⁿber den xparam-
  653. Parameter DELAY_LOGWRITER=YES zu erh÷hen. Wegen der relativ
  654. kleinen Zahl von Datenbanksessions und der besonderen Art des
  655. R/3-internen Dispatchings ist dies fⁿr SAP R/3 jedoch nicht
  656. ratsam.
  657.  
  658. Lange Schreibtransaktionen: <Anzahl> Log Pages pro Transaktion
  659.     <Anzahl>7 Schreibtransaktionen, <Anzahl> Log Pages
  660. Die von der Applikation abgesetzten Schreibtransaktionen sind
  661. sehr lang und fⁿhren zu sehr vielen physischen SchreibvorgΣngen
  662. auf dem Log. Bei batchartigen Anwendungen ist dieses Verhalten
  663. unproblematisch. Lange Schreibtransaktionen k÷nnen jedoch dann
  664. zu EngpΣssen werden, wenn andere Sessions auf SQL-Objekte
  665. (Zeilen, Tabellen) zugreifen mⁿssen, die von der langen
  666. Schreibtransaktion gesperrt werden. Au▀erdem kann es durch sehr
  667. lange Transaktionen zu einer Verz÷gerung des sog. Checkpoints
  668. kommen, da zum Checkpointzeitpunkt das Commit aller offenen
  669. Schreibtransaktionen abgewartet werden mu▀. Da bis zum Ende des
  670. Checkpoints keine neuen Schreibtransaktionen zugelassen werden,
  671. fⁿhrt dies fast zwangslΣufig zu einem zeitweisen Stillstand des
  672. Datenbankbetriebs (alle Tasks im Status Vwait). Ob ein
  673. Checkpoint geschrieben wird, lΣ▀t sich anhand des Kommandos
  674. SHOW LOCK CONFIG aus xquery o.Σ. feststellen (Ausgabe:
  675. CHECKPOINT WANTED  TRUE)
  676. Aktion
  677. Keine Einflu▀m÷glichkeit von DB-Seite. Bei hΣufigeren
  678. Verz÷gerungen infolge Checkpoints sollten die Logsegmente
  679. vergr÷▀ert werden, da ein Checkpoint bei jedem Abschlu▀ eines
  680. Logsegmentes geschrieben wird. Treten langlaufende
  681. Transaktionen bei Dialogapplikationen auf, so sollte untersucht
  682. werden, ob die lange Transaktion nicht durch zusΣtzliche
  683. Commits entzerrt werden kann.
  684.  
  685. Hohe Kollisionsrate auf <Name>-Region: <Prozentsatz> %
  686.     <Anzahl> Zugriffe (von insges. <Anzahl>), <Anzahl>
  687. Kollisionen
  688. Die Kollisionsrate beim Zugriff auf geschⁿtzte Bereiche im
  689. Memory des Adabas-Kernels ist sehr hoch. Zugriffe auf kritische
  690. Bereiche im von mehreren Tasks gemeinsam genutzten Memory des
  691. Adabas-Datenbankkernels werden durch sog. Regions geschⁿtzt.
  692. Durch die exklusive Reservierung einer Region durch
  693. Datenbanktasks wird u.a. verhindert, da▀ gleichzeitig mehrere
  694. DB-Prozesse/Threads eine globale Speicherstelle manipulieren.
  695. Wird fⁿr Adabas nur ein Prozessor verwendet (x_param-Parameter
  696. MAXCPU=1), so kann es aufgrund des sog. internen Taskings
  697. praktisch nie zu Kollisionen auf Regions kommen (Ausnahme:
  698. parallele Connects, Savepoint). Kommt es im Multi-CPU-Betrieb
  699. zu hohen Kollisionsraten auf Regions, so besteht die Gefahr der
  700. Sequentialisierung des gesamten DB-Betriebs auf den
  701. Regionzugriffen. Die Nutzung zusΣtzlicher CPUs kann dann
  702. aufgrund der zusΣtzlichen SynchronisationsaufwΣnde sogar zu
  703. einem Performancerⁿckgang fⁿhren.
  704. Aktion
  705. Handlungsbedarf besteht bei Kollisionsraten von mehr als 10%.
  706. Generell steigt die Kollisionswahrscheinlichkeit mit wachsender
  707. Anzahl von UKPs (x_param-Parameter MAXCPU). Es sollte daher
  708. geprⁿft werden, ob bei Multiprozessorsystemen die Datenbank die
  709. Applikationsanforderungen auch mit weniger genutzten CPUs
  710. befriedigen kann. Im R/3-Umfeld liegt das VerhΣltnis des CPU-
  711. Verbrauchs zwischen Datenbank und R/3 bei ca. 1:4; auf einer 8-
  712. CPU-Maschine reichen daher i.d.R. zwei CPUs fⁿr Adabas aus.
  713. Entsprechende Rechnungen lassen sich auch fⁿr Client-Server
  714. Architekturen anstellen.
  715. Treten in Multiprozessor-Zentralsystemen hohe Region-
  716. Kollisionsraten auf, so sollte ⁿberprⁿft werden, ob die
  717. Maschine CPU-bound ist und daher die UKPs durch die Applikation
  718. blockiert werden. In diesem Fall sollten diejenigen UKPs, die
  719. Usertasks enthalten, vom Betriebssystem real time priority
  720. erhalten. Fⁿr HP lΣ▀t sich dies durch den x_param-Parameter
  721. REAL_TIME_PRIORITY=<0 ... 127> erreichen. Dabei mu▀ jedoch
  722. unbedingt sichergestellt sein, da▀ MAXPU um mindestens eins
  723. kleiner als die Anzahl realer CPUs ist.
  724. ZusΣtzliche Ma▀nahmen:
  725. ╖   DATAn-, SPLITTn-, TREEn-Region:
  726.  Die Segmentierung des Datacaches kann mit den xparam-Parametern
  727.  DATA_CACHE_REGIONS, SPLITT_REGIONS, TREE_REGIONS erh÷ht werden,
  728.  wodurch die Kollisionswahrscheinlichkeiten sinken. Gleichzeitig
  729.  sollte (mu▀ aber nicht) der Datacache (DATA_CACHE_PAGES) etwas
  730.  vergr÷▀ert werden, damit die Subcaches nicht zu klein werden.
  731.  Problematisch ist, wenn die Kollisionsrate nur auf einer
  732.  Subregion der DATA-, SPLITT- oder TREE-Strukturen hoch liegt.
  733.  In diesem Fall arbeiten mehrere Anwendungen offenbar parallel
  734.  auf der gleichen Page oder zumindest hochfrequent auf der
  735.  gleichen Tabelle (Rootpage). Hier kann nur die ─nderung in der
  736.  Applikationslogik eine Verbesserung bringen.
  737. ╖   LOCK -Region:
  738.  Die Kollisionswahrscheinlichkeit auf der LOCK-Region steigt mit
  739.  steigender Zahl von SQL-SperreintrΣgen in der Lockliste. Eine
  740.  Verringerung der Sperrzahl fⁿhrt in der Regel zu einer
  741.  drastischen Reduktion der Region-Kollisionen. M÷gliche
  742.  Ma▀nahmen in der Anwendung: Isolation Level 0, kurze
  743.  Transaktionen, Tabellen- statt Zeilensperren. M÷gliche
  744.  Ma▀nahmen in xparam: Parameter PRIO_TASK=203  bei einem UKP
  745.  bzw. PRIO_TASK=207 bei mehreren UKPs (d.h. MAXCPU > 1).
  746. ╖   TRACE-, BUFWRTR -Region:
  747.  Vtrace immer nur vorⁿbergehend zur Lokalisierung eines DB-
  748.  Problems einschalten.
  749.  
  750. Hohe TAS-Kollisionsrate, <Anzahl> pro Regionzugriff
  751.     <Anzahl> TAS-Kollisionen, <Anzahl> Regionzugriffe
  752. Die Kollisionsrate beim Zugriff auf Adabas-interne Semaphoren
  753. im Umfeld von Regionzugriffen (s.o.) ist sehr hoch. Bei
  754. korrekter Parameterisierung ist dieses PhΣnomen nur bei Multi-
  755. CPU-Maschinen und hohen CPU- bzw. UKP-Zahlen (x_param Parameter
  756. MAXCPU > 4) zu beobachten.
  757. Aktion
  758. Die TAS-Kollisionswahrscheinlichkeit steigt mit wachsender
  759. Anzahl von UKPs (x_param-Parameter MAXCPU). Es sollte daher
  760. geprⁿft werden, ob bei Multiprozessorsystemen die Datenbank die
  761. Applikationsanforderungen auch mit weniger genutzten CPUs
  762. befriedigen kann. Im R/3-Umfeld liegt das VerhΣltnis des CPU-
  763. Verbrauchs zwischen Datenbank und R/3 bei ca. 1:4; bei einer 8-
  764. CPU-Maschine reichen daher i.d.R. zwei CPUs fⁿr Adabas aus.
  765. Entsprechende Rechnungen lassen sich auch fⁿr Client-Server
  766. Architekturen anstellen.
  767. Sollte die Datenbank auf einem reinen Datenbankserver laufen
  768. (Client-Server), so sollte ab vier CPUs die Anzahl der UKPs um
  769. mindestens 1 kleiner sein als die Anzahl der CPUs. Falls
  770. weiterhin TAS-Kollisionen auftreten, sollte der x_param-
  771. Parameter REG_DIRTY_READ auf YES gesetzt werden.
  772. Treten in Multiprozessor-Zentralsystemen hohe TAS-Kollisionen
  773. bei weniger als 4 UKPs auf, sollte ⁿberprⁿft werden, ob die
  774. Maschine CPU-bound ist und daher die UKPs durch die Applikation
  775. blockiert werden. In diesem Fall sollten diejenigen UKPs, die
  776. Usertasks enthalten, vom Betriebssystem real time priority
  777. erhalten. Fⁿr HP lΣ▀t sich dies durch den x_param-Parameter
  778. REAL_TIME_PRIORITY=<0 ... 127>  erreichen. Dabei mu▀ jedoch
  779. unbedingt sichergestellt sein, da▀ MAXPU um mindestens eins
  780. kleiner als die Anzahl realer CPUs ist.
  781.  
  782. Hohe Anzahl langlaufender Kommandos (> 1 Sek.): <Prozentsatz> %
  783.     <Anzahl> Langlaeufer, <Anzahl> Kommandos
  784. Eine hoher Prozentsatz von SQL-Kommandos hat Laufzeiten von
  785. mehr als einer Sekunde im Adabas-Kernel. Ob dies wirklich ein
  786. Engpa▀ ist, hΣngt von der Anwendungsstruktur ab. So fⁿhren
  787. Massenkommandos bei Batchverarbeitungen hΣufig zu hohen
  788. Laufzeiten. Auch kommt es bei Lock-Situationen auf SQL-Objekten
  789. zu Wartezeiten, die ebenfalls die Bearbeitungsdauer verlΣngern.
  790. Das Auftreten von langlaufenden Kommandos ist damit nur ein
  791. Warnsignal.
  792. Aktion
  793. Falls es keine weiteren Hinweise durch x_wizard gibt, sollte
  794. u.a. ⁿberprⁿft werden, ob der Datenbankserver CPU-bound ist.
  795.  
  796. Hohe Kommandolaufzeit im DB-Kernel (Receive/Reply): <Dauer>
  797. Sek.
  798. Die mittlere Bearbeitungszeit der SQL-Kommandos durch den
  799. Adabas-Kernel liegt ⁿber 100 ms. Ob dies wirklich ein Engpa▀
  800. ist, hΣngt von der Anwendungsstruktur ab. So fⁿhren
  801. Massenkommandos bei Batchverarbeitungen hΣufig zu hohen
  802. Laufzeiten. Daneben fⁿhren Lock-Situationen auf SQL-Objekten,
  803. physisches I/O, Dispatching infolge Priorisierung anderer Tasks
  804. etc. zu kernelinternen Wartesituationen, die ebenfalls die
  805. Bearbeitungsdauer verlΣngern.
  806. Aktion
  807. Falls es keine weiteren Hinweise durch x_wizard gibt, sollte
  808. u.a. ⁿberprⁿft werden, ob der Datenbankserver CPU-bound ist.
  809.  
  810. Hohe Anzahl von Self-Suspends (Dispatches): <Anzahl> pro
  811. Kommando
  812. Die Anzahl von Adabas-internen TaskverdrΣngungen ist sehr hoch.
  813. Langlaufende Kommandos werden in ihrer Abarbeitung nach einer
  814. bestimmten Laufzeit (xparam-Parameter REGION_LOCK_SLICE)
  815. unterbrochen, damit die Datenbank nicht durch LanglΣufer fⁿr
  816. andere Sessions blockiert wird (Σhnlich wie Timeslices in
  817. Betriebssystemen). Ob es sich bei diesem Verhalten um ein
  818. Problem handelt, kann nur bei Kenntnis des Anwendungsprofils
  819. entschieden werden. So fⁿhren z.B. aufwendige Suchen im
  820. Datencache fast zwangslΣufig zu einer drastischen Zunahme von
  821. Selfsupends. Eine hohe Zahl von Self-Suspends ist in jedem Fall
  822. ein Indiz fⁿr einen hohen Anteil langlaufender Kommandos.
  823. Eine Task kann zudem ein Self-Suspend ausfⁿhren, wenn eine
  824. andere, h÷her priorierte Task vom wartenden in den lauffΣhigen
  825. Zustand ⁿbergeht (nur bei xparam DYN_DISP_QUE_SRCH=YES).
  826. Aktion
  827. Bei batchartigen Anwendungen kann die Zahl der Self-Suspends
  828. durch Erh÷hung des xparam-Parameters
  829. REG_LOCK_SLICE verringert werden. Dies kann infolge einer
  830. Sequentialisierung der abzuarbeitenden Kommandos zu einer
  831. Verbesserung des Durchsatzes fⁿhren, doch werden kurzlaufende
  832. Kommandos damit benachteiligt (h÷here Dialog-Antwortzeit).
  833. Falls die Analyse der DB-Anwendung keinen Hinweis auf  komplexe
  834. Kommandos ergibt, sollte ⁿberprⁿft werden, ob die SQL-Kommandos
  835. nicht erheblich mehr Daten lesen, als eigentlich zur
  836. Abarbeitung  ben÷tigt werden (z.B. durch Tablescans oder
  837. ungⁿnstige Select-Strategien, ggf. Vtrace mittels x_wizbit
  838. auswerten).
  839.  
  840. Hohe Vsuspend-Zeiten bei User-Tasks: <Dauer> Sek. pro Vsuspend
  841. (<Anzahl> Vsuspends)
  842. Die Dauer Adabas-interner WartezustΣnde ist sehr hoch. Damit
  843. sind nicht Kollisionen auf SQL-Sperrobjekten gemeint (diese
  844. fⁿhren zum sog. Vwait), vielmehr WartezustΣnde auf
  845. unterschiedliche Ereignisse, wie z.B. das Schreiben eines Log-
  846. Eintrags, die Freigabe eines B*-Baumes nach einer
  847. StrukturΣnderung etc. .
  848. Aktion
  849. Keine. Eine genauere Analyse kann nur durch den Adabas-Support
  850. erfolgen.
  851.  
  852. Hohe Anzahl an Vsleeps bei User Tasks: <Anzahl> pro Kommando
  853.     <Anzahl> Vsleeps, <Anzahl> Kommandos
  854. Die HΣufigkeit des Adabas-internen Wartezustandes Vsleep ist
  855. sehr hoch.
  856. Aktion
  857. Keine. Eine genauere Analyse kann nur durch den Adabas-Support
  858. erfolgen.
  859. x_wiztrc  -  Zeitlicher Verlauf von internen Adabas-Me▀werten
  860.  
  861. AUFRUF
  862.    x_wiztrc [-i Filename] [-P lines] -o|-c|-t|-O|-C|-g|-s|-S|-
  863.    l|-r|-R|-T|-d|-p
  864.  
  865. BESCHREIBUNG
  866.    x_wiztrc wertet die durch x_wizard gesammelten Daten aus
  867.    und gibt sie chronologisch in Tabellenform aus8. Die
  868.    ausgegebenen Me▀werte beziehen sich dabei stets auf das
  869.    zwischen zwei Messungen liegende Zeitintervall.
  870.  
  871. VORAUSSETZUNGEN
  872.    -   Adabas D ab Release 6.1.19.
  873.    -   Vorausgegangener Start von x_wizard mit den Optionen æ-t
  874.      sec -b ...Æ
  875.  
  876. OPTIONEN
  877.    -i Filename    Eingabe-Datenfile mit den Me▀werten aus
  878.                    x_wizard (Default: x_wizard.bin).
  879.  
  880.    -P lines       Neue ▄berschrift nach jeweils lines Zeilen.
  881.  
  882.    -o             Overview. Wichtigste Me▀daten.
  883.  
  884.    -c             Commands. Ausgefⁿhrte Kommandos (Select,
  885.                    Update, Delete...).
  886.  
  887.    -t             Transactions. Ausgefⁿhrte Transaktionen
  888.                    (Commits, Rollbacks ...).
  889.  
  890.    -O             I/O. I/O-AktivitΣten.
  891.  
  892.    -C             Caches. Zugriffe und Hitraten der
  893.                    Datenbankcaches.
  894.  
  895.    -g             Log. Logging-AktivitΣten.
  896.  
  897.    -s             Strategy. Zugriffsstrategien des
  898.                    kostenbasierten Adabas-Optimizers (1).
  899.  
  900.    -S             Strategy. Zugriffsstrategien des
  901.                    kostenbasierten Adabas-Optimizers (2).
  902.  
  903.    -l             Lock. SQL-Sperren.
  904.  
  905.    -r             Regions. Zugriffe und Kollisionen auf
  906.                    Regions (1).
  907.  
  908.    -R             Regions. Zugriffe und Kollisionen auf
  909.                    Regions (2).
  910.  
  911.    -T             Temp. AktivitΣten auf Temp-Pages.
  912.  
  913.    -d             Dispatching. ▄bersicht der Dispatcher-
  914.    AktivitΣten.
  915.  
  916.    -p             Prioritization. Taskpriorisierungen im
  917.                    Dispatcher.
  918.  
  919.  
  920. BEMERKUNGEN
  921. Zielgruppe fⁿr x_wiztrc sind nicht Endanwender, sondern
  922. Mitarbeiter von Adabas-Support und -Entwicklung. Daher wird auf
  923. eine genaue ErklΣrung der ausgegebenen Parameter verzichtet.
  924.  
  925. x_wiztrc-Ausgabetabellen
  926.  
  927. Overview
  928. DaH        Datacache Hitrate [%]
  929. CaH        Catalogcache Hitrate [%]
  930. Exe        Anzahl Executes
  931. Wtr        Anzahl Write Transactions
  932. PhR        Anzahl Physical Reads
  933. PhW        Anzahl Physical Writes
  934. LgW        Anzahl Physical Log Writes
  935. WaC        Anzahl SQL Kollisionen (Vwait)
  936. WaTm       Mittl. Dauer einer SQL-Kollision [s]
  937. SuC        Anzahl Vsuspends
  938. SuTm       Mittl. Dauer eines Vsuspends [s]
  939. RRTm       Mittl. Kommandobearbeitungszeit im DB-Kernel [s]
  940. LoC        Anzahl von Kommandobearbeitungszeiten > 1 Sekunde
  941. Rcol       mittl. Kollisionsrate auf Regions [%]
  942. CSwp10     Anzahl Cache-VerdrΣngungen (Physical Writes)
  943.  
  944. Commands
  945. SeA        Anzahl Selects
  946. SeQ        Anzahl selektierter SΣtze
  947. SeH        Trefferrate (gefunden/gelesen) beim Select [%]
  948. InsA       Anzahl Inserts
  949. InsQ       Anzahl eingefⁿgter SΣtze
  950. UpdA       Anzahl Updates
  951. UpdQ       Anzahl geΣnderter SΣtze
  952. UpdH       Trefferrate (geΣndert/gelesen) beim Update [%]
  953. DelA       Anzahl Deletes geΣndert
  954. DelQ       Anzahl gel÷schter SΣtze
  955. DelH       Trefferrate (gel÷scht/gelesen) beim Delete [%]
  956.  
  957. Transactions
  958. Sql        Anzahl SQL Kommandos
  959. Pre        Anzahl Prepares (Parses)
  960. Exe        Anzahl Executes
  961. WTr        Anzahl Schreibtransaktionen
  962. Com        Anzahl Commits
  963. Rol        Anzahl Rollbacks
  964. I/O
  965. PhR        Anzahl Physical Reads
  966. PhW        Anzahl Physical Writes
  967. USio       Anzahl I/O via UKP (User-Task)
  968. USioT      mittl. I/O-Zeit via UKP (User-Task)
  969. UDio       Anzahl I/O via DEV-Proze▀ (User-Task)
  970. UDioT      mittl. I/O-Zeit via DEV-Proze▀ (User-Task)
  971. SSio       Anzahl I/O via UKP (Server-Task)
  972. SSioP      Anzahl geschriebener Pages via UKP (Server-Task)
  973. SSioT      mittl. I/O-Zeit via UKP (Server-Task)
  974. SDio       Anzahl I/O via DEV-Proze▀ (Server-Task)
  975. SDioP      Anzahl geschriebener Pages via DEV-Proze▀ (Server-
  976.            Task)
  977. SDioT      mittl. I/O-Zeit via DEV-Proze▀ (Server-Task)
  978.  
  979. Caches
  980. DaA        Anzahl Zugriffe auf Datacache
  981. DaH        Datacache Hitrate [%]
  982. CaA        Anzahl Zugriffe auf Catalogcache
  983. CaH        Catalogcache Hitrate [%]
  984. CoA        Anzahl Zugiffe auf Convertercache
  985. CoH        Convertercache Hitrate [%]
  986. DnRC       KollisionshΣufigkeit auf Datacache-Regions [%]
  987. CoRC       KollisionshΣufigkeit auf Convertercache-Region [%]
  988. CSwp       Anzahl Cache-VerdrΣngungen (Physical Writes)
  989.  
  990. Log
  991. LgI        Anzahl Log Queue Inserts
  992. Lov        Anzahl Log Queue Overflows
  993. LgW        Anzahl Physical Log Writes
  994. LgR        Anzahl Physical Log Reads
  995. Sio        Anzahl Logwrite-AuftrΣge via UKP (Self I/O)
  996. SioP       Anzahl geschriebener Logpages via UKP (Self I/O)
  997. SioT       mittl. I/O-Zeit eines Logauftrags via UKP (Self
  998.            I/O) [s]
  999. Dio        Anzahl Logwrite-AufrΣge via DEV-Proze▀
  1000. DioP       Anzahl geschriebener Logpages via DEV-Proze▀
  1001. DioT       mittl. I/O-Zeit eines Logauftrags via DEV-Proze▀
  1002.            [s]
  1003.  
  1004. Strategy (1)11
  1005. TscA       Anzahl Zugriffe ⁿber Strategie æTable ScanÆ
  1006. TscR       Anzahl gelesener SΣtze bei Strategie æTable ScanÆ
  1007. TscQ       Anzahl  qualifizierter SΣtze  bei  Strategie  æTable
  1008.            ScanÆ
  1009. KeyA       Anzahl Zugriffe ⁿber Strategie æKeyÆ
  1010. KeyR       Anzahl gelesener SΣtze bei Strategie æKeyÆ
  1011. KeyQ       Anzahl qualifizierter SΣtze bei Strategie æKeyÆ
  1012. KRaA       Anzahl Zugriffe ⁿber Strategie æKey RangeÆ
  1013. KRaR       Anzahl gelesener SΣtze bei Strategie æKey RangeÆ
  1014. KRaQ       Anzahl  qualifizierter  SΣtze  bei  Strategie   æKey
  1015.            RangeÆ
  1016. IndA       Anzahl Zugriffe ⁿber Strategie æIndexÆ
  1017. IndR       Anzahl gelesener SΣtze bei Strategie æIndexÆ
  1018. IndQ       Anzahl qualifizierter SΣtze bei Strategie æIndexÆ
  1019.  
  1020. Strategy (2)
  1021. IRaA       Anzahl Zugriffe ⁿber Strategie æIndex RangeÆ
  1022. IRaR       Anzahl gelesener SΣtze bei Strategie æIndex RangeÆ
  1023. IRaQ       Anzahl  qualifizierter SΣtze  bei  Strategie  æIndex
  1024.            RangeÆ
  1025. IsIA       Anzahl Zugriffe ⁿber Strategie æIsolated IndexÆ
  1026. IsIR       Anzahl   gelesener  SΣtze  bei  Strategie  æIsolated
  1027.            IndexÆ
  1028. IsIQ       Anzahl  qualifizierter SΣtze bei Strategie æIsolated
  1029.            IndexÆ
  1030. IIRA       Anzahl  Zugriffe  ⁿber  Strategie  æIsolated   Index
  1031.            RangeÆ
  1032. IIRR       Anzahl   gelesener  SΣtze  bei  Strategie  æIsolated
  1033.            Index RangeÆ
  1034. IIRQ       Anzahl  qualifizierter SΣtze bei Strategie æIsolated
  1035.            Index RangeÆ
  1036. IISA       Anzahl  Zugriffe  ⁿber  Strategie  æIsolated   Index
  1037.            ScanÆ
  1038. IISR       Anzahl   gelesener  SΣtze  bei  Strategie  æIsolated
  1039.            Index ScanÆ
  1040. IISQ       Anzahl  qualifizierter SΣtze bei Strategie æIsolated
  1041.            Index ScanÆ
  1042.  
  1043. Lock
  1044. LocR       Anzahl Lock List Entries (Row)
  1045. LocT       Anzahl Lock List Entries (Table)
  1046. LoCol      Anzahl Lock List Collisions
  1047. WaC        Anzahl SQL-Sperrkollisionen (Vwaits)
  1048. WaTm       mittl. Kollisionsdauer [s]
  1049. LcRG       Anzahl Zugriffe auf Lock-Region
  1050. LcRC       Kollisionsrate auf Lock-Region [%]
  1051. Kb05       Anzahl KB05-AuftrΣge
  1052.  
  1053. Regions (1)12
  1054. CoRG       Anzahl Zugriffe auf CONVERT-Region
  1055. CoRC       Kollisionsrate auf CONVERT-Region [%]
  1056. LcRG       Anzahl Zugriffe auf LOCKRegion
  1057. LcRC       Kollisionsrate auf LOCK-Region [%]
  1058. DnRG       Anzahl Zugriffe auf DATAn-Regions
  1059. DnRC       Kollisionsrate auf DATAn-Regions [%]
  1060. TnRG       Anzahl Zugriffe auf TREEn-Regions
  1061. TnRC       Kollisionsrate auf TREEn-Regions [%]
  1062. SnRG       Anzahl Zugriffe auf SPLITTn-Regions
  1063. SnRC       Kollisionsrate auf SPLITTn-Regions [%]
  1064.  
  1065. Regions (2)
  1066. LoRG       Anzahl Zugriffe auf LOG-Region
  1067. LoRC       Kollisionsrate auf LOG-Region [%]
  1068. LwRG       Anzahl Zugriffe auf LOGWRITER-Region
  1069. LwRC       Kollisionsrate auf LOGWRITER-Region [%]
  1070. PdRG       Anzahl Zugriffe auf PERMFDIR-Region
  1071. PdRC       Kollisionsrate auf PERMFDIR-Region [%]
  1072. TdRG       Anzahl Zugriffe auf TEMPFDIR-Region
  1073. TdRC       Kollisionsrate auf TEMPFDIR-Region [%]
  1074. TrRG       Anzahl Zugriffe auf TRACE-Region
  1075. TrRC       Kollisionsrate auf TRACE-Region [%]
  1076.  
  1077. Temp
  1078. TPR        Anzahl Physical Temp Page Reads
  1079. TPW        Anzahl Physical Temp Page Writes
  1080. TPVR       Anzahl Virtual Temp Page Reads
  1081. TPVW       Anzahl Virtual Temp Page Writes
  1082.  
  1083. Dispatching13
  1084. ToDC       Anzahl Dispatcher Calls
  1085. ToVwa      Anzahl Vwaits
  1086. ToSus      Anzahl Vsuspends
  1087. ToSle      Anzahl Vsleeps
  1088. TRegA      Anzahl Regionzugriffe
  1089. TReCo      Anzahl Regionkollisionen
  1090. TReWa      Anzahl Regionwaits (Sem-Queue)
  1091. TBgTC      Anzahl TAS-Kollisionen im Vbegexcl
  1092. TEnTC      Anzahl TAS-Kollisionen im Vendexcl
  1093.  
  1094. Prioritization
  1095. ToDC       Anzahl Dispatcher Calls
  1096. ToTCo      Anzahl Kommandos
  1097. TotPr      Anzahl Task-Priorisierungen
  1098. TPrFO      Anzahl Task-Priorisierungen durch andere UKPs
  1099. TPrCQ      Anzahl Task-Priorisierungen in Com-Queue
  1100. TPrRQ      Anzahl Task-Priorisierungen in Rav-Queue
  1101. TPrCo      Anzahl Task-Priorisierungen bei Commits
  1102.  
  1103. x_wizbit - Suche nach EngpΣssen im Adabas Kerneltrace
  1104.  
  1105. AUFRUF
  1106.    x_wizbit [-d] [-t time] [-r rel] [-p pags] [-s] [-l lines]
  1107.    [-L line] Vtracefile
  1108.  
  1109. BESCHREIBUNG
  1110.    x_wizbit sucht im Adabas Kerneltrace (dem sog. Vtrace) nach
  1111.    SQL-Kommandos, die aufgrund ihrer Laufzeit, einer
  1112.    ungⁿnstigen Suchstrategie oder einer gro▀en Anzahl
  1113.    gelesener Datenbankpages einen Datenbank-Engpa▀ der
  1114.    laufenden Anwendung verursachen k÷nnen.
  1115.  
  1116. VORAUSSETZUNGEN
  1117.    -   Adabas D ab Release 6.1.1
  1118.    -   Das Datenbankmonitoring mu▀ eingeschaltet sein14.
  1119.    -   Der TIME-Vtrace mu▀ eingeschaltet sein (xutil: DIAGNOSE
  1120.      VTRACE DEFAULT TIME ON)
  1121. -   Die Speicherung der geparsten Kommandos mu▀ eingeschaltet
  1122. sein (xutil: DIAGNOSE PARSEID ON)
  1123.    -   Der Connect an die Datenbank erfolgt ⁿber den DEFAULT-Key
  1124.      in xuser. Ist kein XUSER-File vorhanden, mⁿssen die Connect-
  1125.      Parameter ⁿber die Shellvariable SQLOPT ⁿbergeben werden.
  1126.  
  1127. OPTIONEN
  1128.    -d             Suche der kritischen Kommandos in der
  1129.                    internen Adabas-Tabelle SYSPARSEID. Nur
  1130.                    durch diese Option wird zu den Me▀werten
  1131.                    das zugeh÷rige SQL-Kommando angezeigt.
  1132.  
  1133.    -t time        Ausgabe aller SQL-Kommandos mit einer
  1134.                    h÷heren Laufzeit als time Sekunden.
  1135.                    Default: 1
  1136.  
  1137.    -r rel         Ausgabe aller SQL-Kommandos, bei denen das
  1138.                    VerhΣltnis zwischen gelesenen und
  1139.                    qualifizierten (d.h. gefundenen) SΣtze
  1140.                    h÷her als rel ist. Default: 10
  1141.  
  1142.    -p pags        Ausgabe aller SQL-Kommandos, bei denen
  1143.                    wΣhrend der Abarbeitung mehr als pags Pages
  1144.                    virtuell oder physisch gelesen werden
  1145.                    mu▀ten. Default: 1000
  1146.  
  1147.    -s             Ausgabe aller Table Scans
  1148.  
  1149.    -l lines       Keine Ausgabe von Kommandos, die weniger
  1150.                    als lines Zeilen im Vtrace geschrieben
  1151.                    haben.
  1152.  
  1153.    -L line        Ausgabe des Vtraceoutputs ab Zeile line bis
  1154.                    zum Ende des Kommandos. Die Option -L kann
  1155.                    nicht gleichzeitig mit den ⁿbrigen Optionen
  1156.                    verwendet werden (ggf. ⁿbersteuert sie
  1157.    diese).
  1158.  
  1159.    BEMERKUNGEN
  1160.    Zur Analyse des Vtraces mittels x_wizbit sind einige
  1161.    Vorbereitungen erforderlich. So mu▀ vor dem Start des
  1162.    Applikationsprogramms (z.B. vor startsap r3) die
  1163.    Speicherung der SQL-Kommandos in der Datenbank aktiviert
  1164.    werden (xutil: DIAGNOSE PARSEID ON). Am Ende der Messungen
  1165.    sollte die weitere Speicherung deaktiviert werden (DIAGNOSE
  1166.    PARSEID OFF), da jedes gespeicherte Kommando bis zu 4
  1167.    Kilobyte Platz in der Datenbank ben÷tigt. Daneben mu▀ der
  1168.    TIME-Vtrace eingeschaltet sein. Da unter Hochlast das
  1169.    Schreiben des Vtraces sehr kostenintensiv sein kann, sollte
  1170.    in Produktivsystemen der Vtrace nur wΣhrend der
  1171.    erforderlichen Me▀periode aktiviert werden, ggf. auch nur
  1172.    fⁿr eine ausgewΣhlte Session. Der Vtracebereich (xparam-
  1173.    Parameter KERNELTRACESIZE) sollte mindestens 1000 Pages
  1174.    betragen. Der Vtrace wird am besten mittels kernprot -dn
  1175.    $DBNAME akbt im Adabas-Rundirectory erzeugt und
  1176.    ausgewertet.
  1177.  
  1178.    Die Optionen -t, -r,-s und -p sind additiv, d.h. es erfolgt
  1179.    eine Ausgabe, wenn mindestens eines der Ausgabekriterien
  1180.    erfⁿllt ist. Sollen dagegen nur jene Kommandos ausgegeben
  1181.    werden, fⁿr die genau ein Kriterium erfⁿllt ist, so k÷nnen
  1182.    bei den ⁿbrigen Optionen Maximalwerte angegeben werden
  1183.    (Beispiel: Zeige alle Kommandos mit einem VerhΣltnis Rows
  1184.    Read / Rows Qual > 10: x_wizbit -r 10 -t 10000 -p 10000 -d
  1185.    $DBNAME).
  1186.  
  1187.    HΣufig kommen hohe Laufzeiten nur dadurch zustande, da▀
  1188.    Kommandos infolge interner WartezustΣnde auf I/O, SQL-
  1189.    Sperren etc. unterbrochen (dispatched) wurden. Um diese
  1190.    unkritischen Kommandos auszufiltern, kann die Option -l
  1191.    benutzt werden. ErfahrungsgemΣ▀ verursachen Kommandos keine
  1192.    EngpΣsse, die weniger als 50 Zeilen Vtrace-Output erzeugen.
  1193.  
  1194. Gezielte Suche nach teuren SQL-Kommandos
  1195. ╖   Datenbank starten und restarten
  1196. ╖   xutil: DIAGNOSE VTRACE DEFAULT TIME ON
  1197. ╖   xutil: DIAGNOSE PARSEID ON
  1198. ╖   xquery (adabas Mode): MONITOR ON
  1199. ╖   M÷glichst zweites Window ÷ffnen, dort in Adabas-
  1200. Rundirectory wechseln
  1201. ╖   Im 1. Window x_wizard -x -t 30
  1202. ╖   Applikation starten
  1203. ╖   Sobald die Meldung Niedrige Hitrate via <Strategie> ...
  1204.  erscheint, im zweiten Window den Vtrace mit kernprot -dn
  1205.  $DBNAME akbt ziehen.
  1206. ╖   Vtrace auswerten mit x_wizbit -l 50 -d $DBNAME.prt >
  1207.  wizbit.prt
  1208. ╖   im File wizbit.prt die langlaufenden Kommandos
  1209.  analysieren. Dazu mittels xquery ⁿberprⁿfen, ob die WHERE-
  1210.  Qualifikation ⁿber den KEY oder einen Index abgehandelt werden
  1211.  k÷nnte. Eventuell Select-Strategie mittels EXPLAIN in xquery
  1212.  ⁿberprⁿfen.
  1213.  
  1214.  
  1215. _______________________________
  1216. 1 In SAP R/3 wird x_wizard ab Release 3.0 automatisch mit einem
  1217. Me▀intervall von 15 Minuten gestartet. Die Auswertung ist ⁿber
  1218. die Transaktion st04 abrufbar (englische Meldungstexte).
  1219. 2 Mit eingeschrΣnkter FunktionalitΣt steht x_wizard auch fⁿr
  1220. Adabas D Release 3.1.2 zur Verfⁿgung.
  1221. 3 Bei SAP R/3 wird das Adabas-Monitoring automatisch
  1222. eingeschaltet. Es sollte wΣhrend des laufenden R/3-
  1223. Produktivbetriebs nicht durch MONITOR ON neu initialisiert
  1224. werden, da in diesem Fall die R/3-interne Statistikauswertung
  1225. verfΣlscht wird.
  1226. 4 Dieser Richtwert gilt fⁿr SAP R/3. Fⁿr andere Anwendungen ist
  1227. hΣufig ein wesentlich kleinerer Catalogcache ausreichend.
  1228. 5 Diese Bufwriter-Parameter befinden sich derzeit (August 95)
  1229. in einer Erprobungsphase und k÷nnen daher kurzfristig geΣndert
  1230. werden oder entfallen. Typische Werte sind NUM_BUFREADER=2,
  1231. BR_SLEEPTIME=30,  BR_IF_IOCNT_LT=300).
  1232. 6 Genaugenommen trifft die Aussage quantitativ fⁿr einen
  1233. Isolation Level > 0 nicht zu, da nur solche Transaktionen als
  1234. Schreibtransaktionen gezΣhlt werden, die mindestens eine
  1235. Schreibsperre setzen, aber auch Kollisionen auf Lesesperren
  1236. gezΣhlt werden. Qualitativ deutet eine hohe Kollisionsrate aber
  1237. in jedem Fall auf Sperrprobleme hin.
  1238. 7 0 (Null) als Anzahl bedeutet, da▀ wΣhrend des Me▀intervalls
  1239. eine Schreibtransaktion aktiv war, die noch nicht committed
  1240. ist.
  1241. 8 In SAP R/3 k÷nnen ab Release 3.0 die Tabellen ⁿber die
  1242. Transaktion st04 ausgegeben werden.
  1243. 9 Mit eingeschrΣnkter FunktionalitΣt steht x_wiztrc auch fⁿr
  1244. Adabas D Release 3.1.2 zur Verfⁿgung.
  1245. 10 Nur bei Ausgabe ⁿber SAP R/3, Transaktion st04
  1246. 11  Bei SAP R/3, Transaktion st04 werden die Strategie-Tabellen
  1247. in einer Ausgabe zusammengefa▀t.
  1248. 12 Bei SAP R/3, Transaktion st04 werden die Region-Tabellen in
  1249. einer Ausgabe  zusammengefa▀t.
  1250. 13 Bei SAP R/3, Transaktion st04 werden die Dispatching- und
  1251. Prioritization-Tabellen in einer Ausgabe zusammengefa▀t.
  1252. 14 Bei SAP R/3 wird das Adabas-Monitoring automatisch
  1253. eingeschaltet. Es sollte wΣhrend des laufenden R/3-
  1254. Produktivbetriebs nicht durch MONITOR ON neu initialisiert
  1255. werden, da in diesem Fall die R/3-interne Statistikauswertung
  1256. verfΣlscht wird.
  1257.