array('RATIO', "SELECT case when sum(POOL_DATA_L_READS+POOL_INDEX_L_READS)=0 then 0 else 100*(1-sum(POOL_DATA_P_READS+POOL_INDEX_P_READS)/sum(POOL_DATA_L_READS+POOL_INDEX_L_READS)) end FROM TABLE(SNAPSHOT_APPL('',-2)) as t", '=WarnCacheRatio'), 'Data Cache', 'data cache buffers' => array('DATAC', 'select sum(npages) from SYSCAT.BUFFERPOOLS', 'See tuning reference.' ), 'cache blocksize' => array('DATAC', 'select avg(pagesize) from SYSCAT.BUFFERPOOLS', '' ), 'data cache size' => array('DATAC', 'select sum(npages*pagesize) from SYSCAT.BUFFERPOOLS', '' ), 'Connections', 'current connections' => array('SESS', "SELECT count(*) FROM TABLE(SNAPSHOT_APPL_INFO('',-2)) as t", ''), false ); function perf_db2(&$conn) { $this->conn = $conn; } function Explain($sql,$partial=false) { $save = $this->conn->LogSQL(false); if ($partial) { $sqlq = $this->conn->qstr($sql.'%'); $arr = $this->conn->GetArray("select distinct sql1 from adodb_logsql where sql1 like $sqlq"); if ($arr) { foreach($arr as $row) { $sql = reset($row); if (crc32($sql) == $partial) break; } } } $qno = rand(); $ok = $this->conn->Execute("EXPLAIN PLAN SET QUERYNO=$qno FOR $sql"); ob_start(); if (!$ok) echo "
Have EXPLAIN tables been created?
"; else { $rs = $this->conn->Execute("select * from explain_statement where queryno=$qno"); if ($rs) rs2html($rs); } $s = ob_get_contents(); ob_end_clean(); $this->conn->LogSQL($save); $s .= $this->Tracer($sql); return $s; } /** * Gets a list of tables * * @param int $throwaway discarded variable to match the parent method * @return string The formatted table list */ function Tables($throwaway=0) { $rs = $this->conn->Execute("select tabschema,tabname,card as rows, npages pages_used,fpages pages_allocated, tbspace tablespace from syscat.tables where tabschema not in ('SYSCAT','SYSIBM','SYSSTAT') order by 1,2"); return rs2html($rs,false,false,false,false); } }