SQLMon для Code Igniter

Мониторинг SQL-запросов в Code Igniter

На днях мне довелось заняться оптимизацией одного проекта, написанного с использованием фреймворка . Важной частью процесса являлась оптимизация запросов к базе данных, а для этого как минимум нужно видеть эти запросы перед глазами.

Этот минимум в достигается очень просто: вызовом

[-]
View Code PHP
$this->output->enable_profiler(TRUE);

в контроллере. Но когда запросов на странице очень много, хотелось бы избавиться от рутинного выполнения EXPLAIN для каждого подозрительного запроса. Что, собственно, и делает . Возникает логичное желание интегрировать его в .

Но в отличие от Kohana, с здесь не всё так просто. Во-первых, не поддерживает так называемую каскадную файловую систему. Во-вторых, не позволяет расширять или заменять класс Database. А изменять код системы (и поддерживать его при каждом обновлении) очень не хочется. Тем не менее, я нашел простое решение и реализовал соответствующую библиотеку.

Перед использованием библиотеки рекомендуется прочитать статью «Optimizing Queries with EXPLAIN».

Использование библиотеки. Библиотека состоит из двух частей:

  1. Драйвер базы данных (каталог system/database/drivers/mysql_exp). Драйвер требует наличия драйвера (класс CI_DB_mysql_driver), так как, по сути дела, является производным от него классом. Драйвер переопределяет метод _execute(), в котором и выполняет анализ запроса.
  2. Представление (view). Находится в каталоге system/application/views/, используется для отображения результатов.

Установка библиотеки простая: содержимое каталога system/database должен быть скопировано в system/database, содержимое каталога system/application должно быть скопировано в каталог приложения. Затем нужно отредактировать настройки соединения с базой данных (файл appliaction/config/database.php): параметр dbdriver соединения нужно установить в mysql_exp.

Пример:

[-]
View Code PHP
$active_group = "default";
$active_record = TRUE;

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "username";
$db['default']['password'] = "password";
$db['default']['database'] = "database";
$db['default']['dbdriver'] = "mysql_exp"; // <<< Вот оно
$db['default']['dbprefix'] = "mso_";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "system/cache/db";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";

Затем в соответствующее представление добавляем код:

[-]
View Code PHP
<?php
    $ci = &get_instance();
    $ci->load->view('sqlmon/sqlmon');
?>

И наслаждаемся. На выходе должно получиться что-то вида (на примере MaxSite CMS; изображение можно кликнуть):

Результат работы SQLMon для Code Igniter на примере MaxSite CMS

Скачать SQLMon для Code Igniter.

Добавить в закладки

Связанные записи

Автор: Vladimir; опубликовано в: PHP; метки: Code Igniter, MySQL, SQLMon, оптимизация
13
Фев
2010

RSS Комментарии к статье «SQLMon для Code Igniter» (3)  »

  1. Одмин

    А где взять саму библиотеку SQLMon ? Я чего то не понял…(

Оставить комментарий к записи «SQLMon для Code Igniter»

Вы должны быть авторизованы, чтобы иметь возможность оставить комментарий.

Подписаться, не комментируя