SQLMon для Code Igniter
Мониторинг SQL-запросов в Code Igniter
На днях мне довелось заняться оптимизацией одного проекта, написанного с использованием фреймворка Code Igniter. Важной частью процесса являлась оптимизация запросов к базе данных, а для этого как минимум нужно видеть эти запросы перед глазами.
Этот минимум в Code Igniter достигается очень просто: вызовом
в контроллере. Но когда запросов на странице очень много, хотелось бы избавиться от рутинного выполнения EXPLAIN для каждого подозрительного запроса. Что, собственно, и делает SQLMon. Возникает логичное желание интегрировать его в Code Igniter.
Но в отличие от Kohana, с Code Igniter здесь не всё так просто. Во-первых, Code Igniter не поддерживает так называемую каскадную файловую систему. Во-вторых, Code Igniter не позволяет расширять или заменять класс Database. А изменять код системы (и поддерживать его при каждом обновлении) очень не хочется. Тем не менее, я нашел простое решение и реализовал соответствующую библиотеку.
Перед использованием библиотеки рекомендуется прочитать статью «Optimizing Queries with EXPLAIN».
Использование библиотеки. Библиотека состоит из двух частей:
- Драйвер базы данных (каталог
system/database/drivers/mysql_exp). Драйвер требует наличия драйвера MySQL (классCI_DB_mysql_driver), так как, по сути дела, является производным от него классом. Драйвер переопределяет метод_execute(), в котором и выполняет анализ запроса. - Представление (view). Находится в каталоге
system/application/views/sqlmon, используется для отображения результатов.
Установка библиотеки простая: содержимое каталога system/database должен быть скопировано в system/database, содержимое каталога system/application должно быть скопировано в каталог приложения. Затем нужно отредактировать настройки соединения с базой данных (файл appliaction/config/database.php): параметр dbdriver соединения нужно установить в mysql_exp.
Пример:
$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";
Затем в соответствующее представление добавляем код:
$ci = &get_instance();
$ci->load->view('sqlmon/sqlmon');
?>
И наслаждаемся. На выходе должно получиться что-то вида (на примере MaxSite CMS; изображение можно кликнуть):
Скачать SQLMon для Code Igniter.
Связанные записи
Автор: Vladimir; опубликовано в: PHP; метки: Code Igniter, MySQL, SQLMon, оптимизацияФев
2010
Комментарии к статье «SQLMon для Code Igniter» (3) »
Оставить комментарий к записи «SQLMon для Code Igniter»
Вы должны быть авторизованы, чтобы иметь возможность оставить комментарий.


Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.






А где взять саму библиотеку SQLMon ? Я чего то не понял…(
http://d.sjinks.pro/sqlmon-ci.zip
Благодарю!