2012-05-02 4 views
2

Я создал веб-приложение в Codeigniter, которое работает нормально около года, и внезапно приложение стало очень медленным в определенное время в течение дня. (иногда 30 + секунд для загрузки страницы). Я начал регистрацию и получается, некоторые запросы работают крайне медленно:MySQL медленная производительность, связанная с ci_sessions Таблица

9.6776  SELECT * FROM (`ci_sessions`) WHERE `session_id` = 'f2f356fb32a4e65ad3eb18f5baa74cfb' AND `user_agent` = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:11' 
28.9770  UPDATE `ci_sessions` SET `last_activity` = '1335753561', `user_data` = 'a:7:{s:6:\"userID\";s:1:\"3\";s:12:\"userFullName\";s:15:\"Christian Varga\";s:5:\"admin\";s:1:\"1\";s:7:\"timeout\";s:5:\"86400\";s:12:\"lastActivity\";s:10:\"1335928202\";s:8:\"prev_url\";s:58:\"http://exampleurl.com\";s:8:\"loggedIn\";s:1:\"1\";}' WHERE `session_id` = 'f2f356fb32a4e65ad3eb18f5baa74cfb' 

Мои мысли, что есть проблема с сервером базы данных, потому что иногда эти те же самые запросы работают хорошо, то в другое время в течение дня они смехотворно медленно (как и выше). Но я быстро указал пальцем, поэтому я просто хотел проверить здесь, если кто-нибудь подумает, что это может быть может быть чем-то не в порядке с кодом, или если это похоже на проблему с сервером.

Буду признателен за любые мысли по этому вопросу.

EDIT: Результат объяснения выбора:

id select_type table   type possible_keys  key   key_len  ref  rows Extra 
1 SIMPLE  ci_sessions const PRIMARY,user_agent PRIMARY  122   const 1 
+1

Просто для удовольствия вы можете заменить SELECT с помощью EXPLAIN SELECT и опубликовать результат? – Eli

+0

vps, общий хост, локальный хост ... схема ci_sessions. много недостающей информации в этом вопросе. –

+0

Отредактировано с объяснением select :) –

ответ

6

Помещенный индекс из нескольких столбцов на session_id и user_agent. Тогда для выполнения запросов не требуется никакого реального времени, даже если у вас есть миллионы строк.

+0

Спасибо за этот отзыв, 'user_agent' на самом деле не был индексом. Теперь скорость снова хорошая, но я также передал билет хостинг-провайдеру, и они сказали, что они «сделали что-то, что должно было исправить». Поэтому мне нужно выяснить, что именно они сделали. –

+0

Но для оптимизации ваших вышеуказанных запросов это не должны быть отдельные индексы для двух, а один индекс для обоих столбцов, начиная с 'session_id'. – Alasdair

+0

Возможно, хозяин выделил MySQL больше памяти, это хорошо, но с использованием правильных индексов вы должны сосредоточиться. – Alasdair

Смежные вопросы