array( 'path' => array('type' => 'varchar', 'length' => '255', 'not null' => TRUE, 'default' => ''), 'last_access' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), 'bytes_max' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), 'bytes_avg' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), 'ms_max' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), 'ms_avg' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), 'query_count_max' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), 'query_count_avg' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), 'query_timer_max' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), 'query_timer_avg' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), 'num_accesses' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), ), 'primary key' => array('path'), 'indexes' => array( 'last_access' => array('last_access')), ); $schema['performance_detail'] = array( 'fields' => array( 'pid' => array('type' => 'serial', 'not null' => TRUE, 'disp-width' => '11'), 'timestamp' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), 'bytes' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), 'ms' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), 'query_count' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), 'query_timer' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), 'anon' => array('type' => 'int', 'not null' => FALSE, 'default' => 1, 'disp-width' => '1'), 'path' => array('type' => 'varchar', 'length' => '255', 'not null' => FALSE), 'data' => array('type' => 'blob', 'not null' => FALSE, 'size' => 'big'), ), 'primary key' => array('pid'), 'indexes' => array( 'timestamp' => array('timestamp')), ); return $schema; } function performance_install() { // Set the weight so this module runs last db_query("UPDATE {system} SET weight = 3000 WHERE name = 'performance'"); } function performance_uninstall() { db_query("DELETE FROM {variable} WHERE name LIKE 'performance%'"); } function performance_requirements($phase) { $requirements = array(); if ($phase != 'runtime') { return $requirements; } if (variable_get('performance_detail', 0)) { $requirements['performance_detail'] = array( 'title' => t('Performance logging details'), 'value' => 'Enabled', 'severity' => REQUIREMENT_WARNING, 'description' => t('Performance detailed logging is enabled. This can cause severe issues on live sites.', array('@link' => url('admin/config/development/performance_logging'))), ); } if (variable_get('devel_query_display', FALSE)) { if (variable_get('performance_detail', 0) || variable_get('performance_summary_db', 0) || variable_get('performance_summary_apc', 0)) { $requirements['performance_query'] = array( 'title' => t('Performance logging query'), 'value' => 'Enabled', 'severity' => REQUIREMENT_WARNING, 'description' => t('Query timing and count logging is enabled. This can cause memory size per page to be larger than normal.', array('@link' => url('admin/config/development/performance_logging'))), ); } } if (!function_exists('apc_fetch')) { $requirements['performance_apc'] = array( 'title' => t('Performance logging APC'), 'value' => 'Disabled', 'severity' => REQUIREMENT_WARNING, 'description' => t('Performance logging on live web sites works best if APC is enabled.'), ); } $shm_size = ini_get('apc.shm_size'); if (function_exists('apc_fetch') && $shm_size < PERFORMANCE_MIN_MEMORY) { $requirements['performance_apc_mem'] = array( 'title' => t('Performance logging APC memory size'), 'value' => $shm_size, 'severity' => REQUIREMENT_WARNING, 'description' => t('APC has been configured for !size, which is less than the recommended !min_memory MB of memory. If you encounter errors when viewing the summary report, then try to increase that limit for APC.', array('!size' => 1*$shm_size, '!min_memory' => PERFORMANCE_MIN_MEMORY)), ); } return $requirements; } function performance_update_1() { $ret = array(); db_drop_field($ret, 'performance_detail', 'title'); db_drop_field($ret, 'performance_summary', 'title'); return $ret; } function performance_update_2() { $ret = array(); db_add_field($ret, 'performance_detail', 'data', array('type' => 'blob', 'not null' => FALSE, 'size' => 'big')); return $ret; } /** * Harmonize notations for milliseconds to "ms". * * @return array */ function performance_update_7001() { $int_field = array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'); db_change_field('performance_summary', 'millisecs_max', 'ms_max', $int_field); db_change_field('performance_summary', 'millisecs_avg', 'ms_avg', $int_field); db_change_field('performance_detail', 'millisecs', 'ms', $int_field); // We don't have a cache update method, so it's better to clear it if (function_exists('apc_fetch')) { apc_clear_cache('user'); } }