Langsames RUNSTATS
- Dieses Thema hat 7 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 14 Jahre, 5 Monaten von
Anonym.
-
AuthorPosts
-
3. April 2009 um 17:55 Uhr #4030
AnonymInaktivHallo zusammen,
wir sind über ein Problem/Eigenheit beim Lauf von RUNSTATS gestopert, das wir uns nicht erklären können. Ich hoffe, Ihr könnt mir Hinweise oder gar Erklärungen geben.
Umgebung: SuSE SLES 10 SP2, 64bit, 8GB Mem, DB2 Workgroup 9.1 SP4a.Wir haben eine Tabelle mit 10,5 Mio Zeilen.
Aufbau:
F1 0 VARCHAR(255) NOT NULL
F2 1 VARCHAR(30) NOT NULL
F3 2 VARCHAR(30) NOT NULL
F4 3 VARCHAR(2) NOT NULL
F5 4 VARCHAR(255) NOT NULLPRIMARY KEY(F1, F2, F3, F4)
Wenn wir über diese Tabelle einen
runstats on table  tab1 on all columns with distribution and detailed indexes all allow write access
durchführen, dann dauert dieser Vorgang "ungewöhnlich lange", obwohl zu diesem Zeitpunkt so gut wie keiner auf der Datenbank und somit auf der Tabelle ist.
Dabei tritt beim Lauf folgendes Muster auf, wenn man sich während des Laufs von runstats via iostat -x die Plattendurchsätze ansieht. Am Anfang wird mit "Vollgas" gelesen. Es sieht so aus, als ob der theoretische IO-Wert erreicht würde. Nach einer Zeit (vielleicht auch nach dem Aufbrauchen des Plattensubsystem-Caches) sinkt plötzlich die Leserate auf keine 1MByte/sec mit sehr sehr vielen Leseoperationen in der Sekunde, so dass die Disk Utilisation auf über 95% anwächst. Also viele kleine Leseoperationen auf der Disk.
Ich kann überhaupt nicht verstehen, warum ein solches Pattern auftritt. Ich gehe davon aus, dass man bei Leseoperationen mit größeren Blockgrößen deutlich höhere Performance erreichen würde.Kann irgendeiner dieses Pattern nachvollziehen oder eine Erklärung geben, warum es sich so verhält? Warum greift DB2 so auf die Platten zu? Noch zur Info: Wir benutzen für die Tabelle database managed tablespaces mit einer Pagesize von 4k.
Zum Begriff "ungewöhnlich lange": Deutlich länger als wenn man den Datenbestand in der Tabelle gerechnet in MB durch einen mittleren realistischen IO-Durchsatz pro Sekunde teilt.
Danke im Voraus.
Gruß
Andreas
3. April 2009 um 19:17 Uhr #4200
AnonymInaktivHi Andreas,
schick‘ doch mal die DB CFG und die DBM CFG rüber. Achtung: Hier nur 5000 Bytes je Eintrag, also nicht zu viele Blanks mitreinnehmen.
Ein Tipp für’s erste: Probier mal A LTER TABLESPACE … NO FILE SYSTEM CACHING. Unter Umständen "cachen" DB2 und das Betriebssystem doppelt und konkurrierend.
Gruß
Gernot
3. April 2009 um 19:37 Uhr #4327
AnonymInaktivadmin wrote: Hi Andreas,
schick‘ doch mal die DB CFG und die DBM CFG rüber. Achtung: Hier nur 5000 Bytes je Eintrag, also nicht zu viele Blanks mitreinnehmen.
Ein Tipp für’s erste: Probier mal A LTER TABLESPACE … NO FILE SYSTEM CACHING. Unter Umständen "cachen" DB2 und das Betriebssystem doppelt und konkurrierend.
Gruß
GernotHi Gernot,
Danke für die schnelle Antwort. Werde die Configs noch zusammentragen. Aber vorab zu Deinem Tipp: Ich bin davon ausgegangen, dass "database managed tablespaces" in jedem Falll durch DirectIO angesprochen werden und damit definitiv am OS-Cache vorbeigehen. Habe ich etwas verpasst? 😕
Gruß
Andreas
6. April 2009 um 18:44 Uhr #4419
AnonymInaktivHi Andreas,
ja, aber … Du meinst etwas anderes …
In DB2 V9.1:
Der DB2-Datenbankmanager aktiviert das Dateisystemcaching bei der Ausführung von Ein-/Ausgabeoperationen automatisch. Zur Inaktivierung dieser Funktion können Sie die Anweisungen C_REATE TABLESPACE oder A_LTER TABLESPACE verwenden. Geben Sie die Klausel NO FILE SYSTEM CACHING an, um für einen bestimmten Tabellenbereich die ungepufferte Ein-/Ausgabe zu aktivieren und das Dateicaching zu inaktivieren. Nach der Aktivierung der ungepufferten E/A bestimmt der DB2-Datenbankmanager automatisch, ob die DIO- oder die CIO-Funktionalität auf den einzelnen Plattformen zu verwenden ist. Angesichts der Leistungsverbesserung durch CIO verwendet der DB2-Datenbankmanager die CIO-Funktionalität immer dann, wenn sie unterstützt wird. Es gibt keine Benutzerschnittstelle, über die angegeben werden könnte, welche von beiden zu verwenden ist.
Die Definition dieser Registrierdatenbankvariablen DB2_DIRECT_IO in DB2 Version 9.1 hat dieselbe Wirkung wie eine Änderung aller Tabellenbereiche (SMS und DMS) mit der Klausel NO FILE SYSTEM CACHING.
Siehe http://publib.boulder.ibm.com/infocenter/db2luw/v9/topic/com.ibm.db2.udb.admin.doc/doc/t0023622.htm
Aber in DB2 V9.5 wird alles anders:
Die Attribute FILE SYSTEM CACHING und NO FILE SYSTEM CACHING geben an, ob E/A-Operationen auf Dateisystemebene in den Cache gestellt werden sollen. Da der Datenbankmanager seinen eigenen Datencache mithilfe von Pufferpools verwaltet, ist ein Caching auf Dateisystemebene nicht erforderlich, wenn die Größe des Pufferpools entsprechend angepasst ist.
In früheren Versionen verwendete der Datenbankmanager bei keiner Angabe des Attributs die gepufferte Ein-/Ausgabe (FILE SYSTEM CACHING) als E/A-Mechanismus. Mit Version 9.5 verwendet der Datenbankmanager NO FILE SYSTEM CACHING.
Für Tablespace Container, die Sie in Version 9.5 erstellen, versucht der Datenbankmanager standardmäßig, so oft wie möglich die gleichzeitige Ein-/Ausgabe (CIO – Concurrent Input/Output) zu verwenden. Für die Systemkonfigurationen, für die CIO nicht unterstützt wird, wird stattdessen die direkte Ein-/Ausgabe (DIO – Direct Input/Output) oder die gepufferte Ein-/Ausgabe verwendet.
CIO und DIO verbessern die Speicherleistung, weil diese Einstellungen dem Datenbankmanager ein Umgehen des Cachings auf Dateisystemebene ermöglichen. Dieser Prozess reduziert den Aufwand für die Systemeinheit und stellt der Datenbankinstanz mehr Speicher zur Verfügung.
Hat’s denn etwas gebracht?
Ciao
Gernot
6. April 2009 um 22:02 Uhr #4477
AnonymInaktivadmin wrote: Hi Hat’s denn etwas gebracht?
Hi Gernot,
nachdem ich ungerne an etwas schraube, ohne zu wissen, ob es nicht schon geschraubt ist, habe ich nachgesehen. Â ::)
Alle Tablespaces, die "database managed" sind haben Filecaching ausgeschaltet (db2 get snapshot for tablespaces). Irgendwie bin ich davon ausgegangen, dass sich das gegenseitig bedingt. Du hast natürlich recht, dass dem nicht so ist.
Ich poste im Anschluss nun noch die gewünschten Configs.
Danke im Voraus
Andreas6. April 2009 um 22:05 Uhr #4506
AnonymInaktiv     Database Manager Configuration
  Node type = Database Server with local and remote clients
Database manager configuration release level       = 0x0b00
CPU speed (millisec/instruction) Â Â Â Â Â Â (CPUSPEED) = 2,558531e-07
Max number of concurrently active databases   (NUMDB) = 8
Federated Database System Support      (FEDERATED) = NO
Transaction processor monitor name     (TP_MON_NAME) =
Default charge-back account      (DFT_ACCOUNT_STR) =
Java Development Kit installation path    (JDK_PATH) = /opt/db2bo/db2home/sqllib/java/jdk64
Diagnostic error capture level        (DIAGLEVEL) = 3
Notify Level                (NOTIFYLEVEL) = 3
Diagnostic data directory path        (DIAGPATH) = /opt/db2bo/db2home/sqllib/db2dump
Default database monitor switches
 Buffer pool             (DFT_MON_BUFPOOL) = ON
 Lock                  (DFT_MON_LOCK) = ON
 Sort                  (DFT_MON_SORT) = ON
 Statement                (DFT_MON_STMT) = ON
 Table                 (DFT_MON_TABLE) = ON
 Timestamp             (DFT_MON_TIMESTAMP) = ON
 Unit of work               (DFT_MON_UOW) = ON
Monitor health of instance and databases  (HEALTH_MON) = OFF
SYSADM group name             (SYSADM_GROUP) = DB2ADM2
SYSCTRL group name            (SYSCTRL_GROUP) =
SYSMAINT group name           (SYSMAINT_GROUP) =
SYSMON group name             (SYSMON_GROUP) =
Client Userid-Password Plugin      (CLNT_PW_PLUGIN) =
Client Kerberos Plugin         (CLNT_KRB_PLUGIN) =
Group Plugin               (GROUP_PLUGIN) =
GSS Plugin for Local Authorization   (LOCAL_GSSPLUGIN) =
Server Plugin Mode           (SRV_PLUGIN_MODE) = UNFENCED
Server List of GSS Plugins    (SRVCON_GSSPLUGIN_LIST) =
Server Userid-Password Plugin     (SRVCON_PW_PLUGIN) =
Server Connection Authentication      (SRVCON_AUTH) = NOT_SPECIFIED
Database manager authentication     (AUTHENTICATION) = SERVER
Cataloging allowed without authority  (CATALOG_NOAUTH) = NO
Trust all clients            (TRUST_ALLCLNTS) = YES
Trusted client authentication      (TRUST_CLNTAUTH) = CLIENT
Bypass federated authentication       (FED_NOAUTH) = NO
Default database path            (DFTDBPATH) = /opt/db2bo/db2home
Database monitor heap size (4KB) Â Â Â Â Â (MON_HEAP_SZ) = 90
Java Virtual Machine heap size (4KB) Â Â (JAVA_HEAP_SZ) = 2048
Audit buffer size (4KB) Â Â Â Â Â Â Â Â Â (AUDIT_BUF_SZ) = 0
Size of instance shared memory (4KB) Â (INSTANCE_MEMORY) = AUTOMATIC
Backup buffer default size (4KB) Â Â Â Â Â Â (BACKBUFSZ) = 1024
Restore buffer default size (4KB) Â Â Â Â Â (RESTBUFSZ) = 1024
Sort heap threshold (4KB) Â Â Â Â Â Â Â Â Â (SHEAPTHRES) = 0
Directory cache support           (DIR_CACHE) = YES
Application support layer heap size (4KB) Â (ASLHEAPSZ) = 15
Max requester I/O block size (bytes) Â Â Â Â (RQRIOBLK) = 32767
Query heap size (4KB) Â Â Â Â Â Â Â Â Â (QUERY_HEAP_SZ) = 1000
Workload impact by throttled utilities(UTIL_IMPACT_LIM) = 10
Priority of agents              (AGENTPRI) = SYSTEM
Max number of existing agents        (MAXAGENTS) = 200
Agent pool size             (NUM_POOLAGENTS) = 100(calculated)
Initial number of agents in pool    (NUM_INITAGENTS) = 50
Max number of coordinating agents   (MAX_COORDAGENTS) = (MAXAGENTS – NUM_INITAGENTS)
Max no. of concurrent coordinating agents  (MAXCAGENTS) = MAX_COORDAGENTS
Max number of client connections    (MAX_CONNECTIONS) = MAX_COORDAGENTS
Keep fenced process             (KEEPFENCED) = YES
Number of pooled fenced processes     (FENCED_POOL) = MAX_COORDAGENTS
Initial number of fenced processes   (NUM_INITFENCED) = 0
Index re-creation time and redo index build  (INDEXREC) = RESTART
Transaction manager database name     (TM_DATABASE) = 1ST_CONN
Transaction resync interval (sec) Â Â (RESYNC_INTERVAL) = 180
SPM name                   (SPM_NAME) =
SPM log size              (SPM_LOG_FILE_SZ) = 256
SPM resync agent limit         (SPM_MAX_RESYNC) = 20
SPM log path               (SPM_LOG_PATH) =
TCP/IP Service name              (SVCENAME) = db2tcpip02
Discovery mode                (DISCOVER) = SEARCH
Discover server instance         (DISCOVER_INST) = ENABLE
Maximum query degree of parallelism  (MAX_QUERYDEGREE) = ANY
Enable intra-partition parallelism   (INTRA_PARALLEL) = YES
No. of int. communication buffers(4KB)(FCM_NUM_BUFFERS) = AUTOMATIC
No. of int. communication channels  (FCM_NUM_CHANNELS) = AUTOMATIC
db2start/db2stop timeout (min) Â Â Â Â (START_STOP_TIME) = 10
6. April 2009 um 22:08 Uhr #4528
AnonymInaktiv   Database Configuration for Database
Database configuration release level           = 0x0b00
Database release level                  = 0x0b00
Database territory                    = DE
Database code page                    = 1208
Database code set                    = UTF-8
Database country/region code               = 49
Database collating sequence               = IDENTITY
Alternate collating sequence        (ALT_COLLATE) =
Database page size                    = 4096
Dynamic SQL Query management      (DYN_QUERY_MGMT) = DISABLE
Discovery support for this database    (DISCOVER_DB) = ENABLE
Restrict access                     = NO
Default query optimization class     (DFT_QUERYOPT) = 7
Degree of parallelism            (DFT_DEGREE) = ANY
Continue upon arithmetic exceptions  (DFT_SQLMATHWARN) = NO
Default refresh age          (DFT_REFRESH_AGE) = 0
Default maintained table types for opt (DFT_MTTB_TYPES) = SYSTEM
Number of frequent values retained   (NUM_FREQVALUES) = 10
Number of quantiles retained       (NUM_QUANTILES) = 20
Backup pending                      = NO
Database is consistent                  = NO
Rollforward pending                   = NO
Restore pending                     = NO
Multi-page file allocation enabled            = YES
Log retain for recovery status              = RECOVERY
User exit for logging status               = NO
Self tuning memory           (SELF_TUNING_MEM) = OFF
Size of database shared memory (4KB) Â (DATABASE_MEMORY) = 8192
Database memory threshold        (DB_MEM_THRESH) = 10
Max storage for lock list (4KB) Â Â Â Â Â Â Â (LOCKLIST) = 2048
Percent. of lock lists per application    (MAXLOCKS) = 50
Package cache size (4KB) Â Â Â Â Â Â Â Â Â (PCKCACHESZ) = 2048
Sort heap thres for shared sorts (4KB) (SHEAPTHRES_SHR) = 20000
Sort list heap (4KB) Â Â Â Â Â Â Â Â Â Â Â Â (SORTHEAP) = 4000
Database heap (4KB) Â Â Â Â Â Â Â Â Â Â Â Â Â Â (DBHEAP) = 2432
Catalog cache size (4KB) Â Â Â Â Â Â Â (CATALOGCACHE_SZ) = 1024
Log buffer size (4KB) Â Â Â Â Â Â Â Â Â Â Â Â (LOGBUFSZ) = 1024
Utilities heap size (4KB) Â Â Â Â Â Â Â Â (UTIL_HEAP_SZ) = 20000
Buffer pool size (pages) Â Â Â Â Â Â Â Â Â Â (BUFFPAGE) = 1000
Max size of appl. group mem set (4KB) (APPGROUP_MEM_SZ) = 30000
Percent of mem for appl. group heap  (GROUPHEAP_RATIO) = 70
Max appl. control heap size (4KB) Â Â (APP_CTL_HEAP_SZ) = 512
SQL statement heap (4KB) Â Â Â Â Â Â Â Â Â Â (STMTHEAP) = 4096
Default application heap (4KB) Â Â Â Â Â Â (APPLHEAPSZ) = 256
Statistics heap size (4KB) Â Â Â Â Â Â Â (STAT_HEAP_SZ) = 8192
Interval for checking deadlock (ms) Â Â Â Â (DLCHKTIME) = 10000
Lock timeout (sec) Â Â Â Â Â Â Â Â Â Â Â Â (LOCKTIMEOUT) = 30
Changed pages threshold         (CHNGPGS_THRESH) = 60
Number of asynchronous page cleaners  (NUM_IOCLEANERS) = AUTOMATIC
Number of I/O servers          (NUM_IOSERVERS) = AUTOMATIC
Index sort flag               (INDEXSORT) = YES
Sequential detect flag            (SEQDETECT) = YES
Default prefetch size (pages) Â Â Â Â (DFT_PREFETCH_SZ) = AUTOMATIC
Track modified pages             (TRACKMOD) = OFF
Default number of containers               = 1
Default tablespace extentsize (pages) Â (DFT_EXTENT_SZ) = 32
Max number of active applications       (MAXAPPLS) = AUTOMATIC
Average number of active applications    (AVG_APPLS) = 1
Max DB files open per application       (MAXFILOP) = 64
Log file size (4KB) Â Â Â Â Â Â Â Â Â Â Â Â (LOGFILSIZ) = 4096
Number of primary log files         (LOGPRIMARY) = 13
Number of secondary log files        (LOGSECOND) = 25
Changed path to log files          (NEWLOGPATH) =
Path to log files                    = /opt/db2bo/db2log1/ppj_bodb/
Overflow log path           (OVERFLOWLOGPATH) =
Mirror log path             (MIRRORLOGPATH) = /opt/db2bo/db2log2/ppj_bodb/
First active log file                  = S0011202.LOG
Block log on disk full         (BLK_LOG_DSK_FUL) = NO
Percent max primary log space by transaction  (MAX_LOG) = 0
Num. of active log files for 1 active UOW(NUM_LOG_SPAN) = 0
Group commit count              (MINCOMMIT) = 1
Percent log file reclaimed before soft chckpt (SOFTMAX) = 520
Log retain for recovery enabled       (LOGRETAIN) = RECOVERY
User exit for logging enabled         (USEREXIT) = OFF
HADR database role                    = STANDARD
HADR local host name          (HADR_LOCAL_HOST) =
HADR local service name         (HADR_LOCAL_SVC) =
HADR remote host name         (HADR_REMOTE_HOST) =
HADR remote service name        (HADR_REMOTE_SVC) =
HADR instance name of remote server  (HADR_REMOTE_INST) =
HADR timeout value            (HADR_TIMEOUT) = 120
HADR log write synchronization mode   (HADR_SYNCMODE) = NEARSYNC
First log archive method         (LOGARCHMETH1) = LOGRETAIN
Options for logarchmeth1 Â Â Â Â Â Â Â Â Â (LOGARCHOPT1) =
Second log archive method         (LOGARCHMETH2) = OFF
Options for logarch
7. April 2009 um 18:47 Uhr #4541
AnonymInaktivHi Andreas,
für mich ist "der übliche Verdächtige" mal wieder [tt]"Enable intra-partition parallelism   (INTRA_PARALLEL) = YES"[/tt].
Bringt meines Erachtens gar nichts – außer Trouble. Würde ich ausschalten. => [tt]INTRA_PARALLEL = NO/OFF.[/tt] Hat nach meinen eigenen Messungen (AIX) und denen eines Forum-Mitglieds kürzlich (Solaris) nie etwas gebracht!
Trotzdem soll DB2 parallel I/O durchführen dürfen. Wie sehen denn die DB2 Umgebungsvariablen aus? Steht DB2_PARALLEL_IO=*? Wenn ja ggf. testweise deaktivieren, sonst testweise aktivieren.  😎
Gruß
GernotPS: Abseits des obigen Problems: Warum steht der Query Optimization Level denn so hoch? Um was für ein System handelt es sich: OLTP oder OLAP? Bei gemischter Anwendung würde ich bei 5 bleiben, bei Bedarf eher heruntersetzen.
-
AuthorPosts
You must be logged in to reply to this topic.