diff --git a/htdocs/sql/libraries/engines/innodb.lib.php b/htdocs/sql/libraries/engines/innodb.lib.php new file mode 100755 --- /dev/null +++ b/htdocs/sql/libraries/engines/innodb.lib.php @@ -0,0 +1,343 @@ + array( + 'title' => $GLOBALS['strInnoDBDataHomeDir'], + 'desc' => $GLOBALS['strInnoDBDataHomeDirDesc'], + ), + 'innodb_data_file_path' => array( + 'title' => $GLOBALS['strInnoDBDataFilePath'], + ), + 'innodb_autoextend_increment' => array( + 'title' => $GLOBALS['strInnoDBAutoextendIncrement'], + 'desc' => $GLOBALS['strInnoDBAutoextendIncrementDesc'], + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ), + 'innodb_buffer_pool_size' => array( + 'title' => $GLOBALS['strInnoDBBufferPoolSize'], + 'desc' => $GLOBALS['strInnoDBBufferPoolSizeDesc'], + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ), + 'innodb_additional_mem_pool_size' => array( + 'title' => 'innodb_additional_mem_pool_size', + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ), + 'innodb_buffer_pool_awe_mem_mb' => array( + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ), + 'innodb_checksums' => array( + ), + 'innodb_commit_concurrency' => array( + ), + 'innodb_concurrency_tickets' => array( + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ), + 'innodb_doublewrite' => array( + ), + 'innodb_fast_shutdown' => array( + ), + 'innodb_file_io_threads' => array( + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ), + 'innodb_file_per_table' => array( + ), + 'innodb_flush_log_at_trx_commit' => array( + ), + 'innodb_flush_method' => array( + ), + 'innodb_force_recovery' => array( + ), + 'innodb_lock_wait_timeout' => array( + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ), + 'innodb_locks_unsafe_for_binlog' => array( + ), + 'innodb_log_arch_dir' => array( + ), + 'innodb_log_archive' => array( + ), + 'innodb_log_buffer_size' => array( + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ), + 'innodb_log_file_size' => array( + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ), + 'innodb_log_files_in_group' => array( + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ), + 'innodb_log_group_home_dir' => array( + ), + 'innodb_max_dirty_pages_pct' => array( + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ), + 'innodb_max_purge_lag' => array( + ), + 'innodb_mirrored_log_groups' => array( + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ), + 'innodb_open_files' => array( + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ), + 'innodb_support_xa' => array( + ), + 'innodb_sync_spin_loops' => array( + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ), + 'innodb_table_locks' => array( + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ), + 'innodb_thread_concurrency' => array( + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ), + 'innodb_thread_sleep_delay' => array( + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ), + ); + } + + /** + * @return string SQL query LIKE pattern + */ + function getVariablesLikePattern() + { + return 'innodb\\_%'; + } + + /** + * @uses $this->support + * @uses PMA_ENGINE_SUPPORT_YES + * @uses PMA_MYSQL_INT_VERSION + * @uses $GLOBALS['strBufferPool'] + * @uses $GLOBALS['strInnodbStat'] + * @return array detail pages + */ + function getInfoPages() + { + if ($this->support < PMA_ENGINE_SUPPORT_YES) { + return array(); + } + $pages = array(); + if (PMA_MYSQL_INT_VERSION >= 50002) { + $pages['Bufferpool'] = $GLOBALS['strBufferPool']; + } + $pages['Status'] = $GLOBALS['strInnodbStat']; + return $pages; + } + + /** + * returns html tables with stats over inno db buffer pool + * + * @uses PMA_MYSQL_INT_VERSION + * @uses PMA_DBI_fetch_result() + * @uses PMA_formatNumber() + * @uses PMA_formatByteDown() + * @uses $GLOBALS['strBufferPoolUsage'] + * @uses $GLOBALS['strTotalUC'] + * @uses $GLOBALS['strInnoDBPages'] + * @uses $GLOBALS['strFreePages'] + * @uses $GLOBALS['strDirtyPages'] + * @uses $GLOBALS['strDataPages'] + * @uses $GLOBALS['strPagesToBeFlushed'] + * @uses $GLOBALS['strBusyPages'] + * @uses $GLOBALS['strLatchedPages'] + * @uses $GLOBALS['strBufferPoolActivity'] + * @uses $GLOBALS['strReadRequests'] + * @uses $GLOBALS['strWriteRequests'] + * @uses $GLOBALS['strBufferReadMisses'] + * @uses $GLOBALS['strBufferWriteWaits'] + * @uses $GLOBALS['strBufferReadMissesInPercent'] + * @uses $GLOBALS['strBufferWriteWaitsInPercent'] + * @uses join() + * @uses htmlspecialchars() + * @uses PMA_formatNumber() + * @return string html table with stats + */ + function getPageBufferpool() + { + if (PMA_MYSQL_INT_VERSION < 50002) { + return false; + } + // rabus: The following query is only possible because we know + // that we are on MySQL 5 here (checked above)! + // side note: I love MySQL 5 for this. :-) + $sql = ' + SHOW STATUS + WHERE Variable_name LIKE \'Innodb\\_buffer\\_pool\\_%\' + OR Variable_name = \'Innodb_page_size\';'; + $status = PMA_DBI_fetch_result($sql, 0, 1); + + $output = '' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . '
' . "\n" + . ' ' . $GLOBALS['strBufferPoolUsage'] . "\n" + . '
' . "\n" + . ' ' . $GLOBALS['strTotalUC'] . "\n" + . ' : ' . PMA_formatNumber( + $status['Innodb_buffer_pool_pages_total'], 0) + . ' ' . $GLOBALS['strInnoDBPages'] + . ' / ' + . join(' ', + PMA_formatByteDown($status['Innodb_buffer_pool_pages_total'] * $status['Innodb_page_size'])) . "\n" + . '
' . $GLOBALS['strFreePages'] . '' + . PMA_formatNumber($status['Innodb_buffer_pool_pages_free'], 0) + . '
' . $GLOBALS['strDirtyPages'] . '' + . PMA_formatNumber($status['Innodb_buffer_pool_pages_dirty'], 0) + . '
' . $GLOBALS['strDataPages'] . '' + . PMA_formatNumber($status['Innodb_buffer_pool_pages_data'], 0) . "\n" + . '
' . $GLOBALS['strPagesToBeFlushed'] . '' + . PMA_formatNumber($status['Innodb_buffer_pool_pages_flushed'], 0) . "\n" + . '
' . $GLOBALS['strBusyPages'] . '' + . PMA_formatNumber($status['Innodb_buffer_pool_pages_misc'], 0) . "\n" + . '
' . $GLOBALS['strLatchedPages'] . '' + . PMA_formatNumber($status['Innodb_buffer_pool_pages_latched'], 0) . "\n" + . '
' . "\n\n" + . '' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . '
' . "\n" + . ' ' . $GLOBALS['strBufferPoolActivity'] . "\n" + . '
' . $GLOBALS['strReadRequests'] . '' + . PMA_formatNumber($status['Innodb_buffer_pool_read_requests'], 0) . "\n" + . '
' . $GLOBALS['strWriteRequests'] . '' + . PMA_formatNumber($status['Innodb_buffer_pool_write_requests'], 0) . "\n" + . '
' . $GLOBALS['strBufferReadMisses'] . '' + . PMA_formatNumber($status['Innodb_buffer_pool_reads'], 0) . "\n" + . '
' . $GLOBALS['strBufferWriteWaits'] . '' + . PMA_formatNumber($status['Innodb_buffer_pool_wait_free'], 0) . "\n" + . '
' . $GLOBALS['strBufferReadMissesInPercent'] . '' + . ($status['Innodb_buffer_pool_read_requests'] == 0 + ? '---' + : htmlspecialchars(PMA_formatNumber($status['Innodb_buffer_pool_reads'] * 100 / $status['Innodb_buffer_pool_read_requests'], 3, 2)) . ' %') . "\n" + . '
' . $GLOBALS['strBufferWriteWaitsInPercent'] . '' + . ($status['Innodb_buffer_pool_write_requests'] == 0 + ? '---' + : htmlspecialchars(PMA_formatNumber($status['Innodb_buffer_pool_wait_free'] * 100 / $status['Innodb_buffer_pool_write_requests'], 3, 2)) . ' %') . "\n" + . '
' . "\n"; + return $output; + } + + /** + * returns InnoDB status + * + * @uses htmlspecialchars() + * @uses PMA_DBI_fetch_value() + * @return string result of SHOW INNODB STATUS inside pre tags + */ + function getPageStatus() + { + return '
' . "\n"
+            . htmlspecialchars(PMA_DBI_fetch_value('SHOW INNODB STATUS;')) . "\n"
+            . '
' . "\n"; + } + + /** + * returns content for page $id + * + * @uses $this->getInfoPages() + * @uses array_key_exists() + * @param string $id page id + * @return string html output + */ + function getPage($id) + { + if (! array_key_exists($id, $this->getInfoPages())) { + return false; + } + + $id = 'getPage' . $id; + + return $this->$id(); + } + + /** + * returns string with filename for the MySQL helppage + * about this storage engne + * + * @return string mysql helppage filename + */ + function getMysqlHelpPage() + { + return 'innodb'; + } +} + +?>