Как понять где узкое место?

Тема в разделе "Базы данных", создана пользователем vredin, 2 июн 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. vredin

    vredin Читатель

    Заблокирован
    Регистр.:
    17 дек 2007
    Сообщения:
    141
    Симпатии:
    35
    есть дедик, на нем пару блогов(вордпресс) и одна галерея комермайн

    смотрю загрузку через htop: один процесс кушает (при аптайме сервера 20 дней) - 45 часов.

    PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
    2089 mysql 15 0 102M 65132 2848 S 69.5 5.0 45h07:47 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock

    я думаю это совсем неправильная ситуация. как определить причину такого использования процессорного времени, чтобы потом избавляться от нее?

    phpmyadmin показывает:
    Slow_queries 1,877
    Slow_launch_threads 459

    в my.cnf long_query_time=2 но закоментировано
     
  2. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    включи логирование медленных запросов, потом оптимизируй их. Явно что базу грузят, тормознутыми запросами....Используй кеш, оптимизируй бд, индексы используй если нету их.
     
  3. vivid

    vivid Постоялец

    Регистр.:
    13 апр 2009
    Сообщения:
    143
    Симпатии:
    18
    когда система начинает виснуть я сразу иду mysql запускать "show full processlist;"
     
  4. vlinker

    vlinker Прохожие

    Профайлер в зубы и в перед
     
  5. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Профайлер надо юзать на стадии написания.
    А если код чужой, то включать лог медленных запросов и смотреть.

    В WP местами встречаются шедевры по части того, как не должны выглядеть SQL-запросы.

    PS правда мускуль зараза не даёт установить для лога время меньшее 1 секунды.
     
  6. vredin

    vredin Читатель

    Заблокирован
    Регистр.:
    17 дек 2007
    Сообщения:
    141
    Симпатии:
    35
    включи логирование медленных запросов, потом оптимизируй их. Явно что базу грузят, тормознутыми запросами....Используй кеш, оптимизируй бд, индексы используй если нету их.

    >> включил, показывает что больше всего медленных запросов в плагине FireStats.. отключил его нафиг..
    лог медленных запросов пуст :(

    и всё равно есть в списке процессов mysql процесс который со вчера уже почти 40 минут серверного времени занимает

    show full processlist

    команда показала 3 строки и в одной строке Time: 85(state: waiting for INSERT), в остальных - по нулям.. у меня смутная догадка что это оно и есть..

    PHP_Master - как мне докопаться до запроса, которых жрет время? скажи, пожалуйста!
     
  7. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Поработаю дятлом :D - включить лог медленных запросов.
    Дать ему поработать сутки, затем прогнать через анализатор и смотреть.

    Если лог пуст - то либо он криво настроен, либо с твоим мускулем не всё в порядке, либо он у тебя выключен.
     
  8. vredin

    vredin Читатель

    Заблокирован
    Регистр.:
    17 дек 2007
    Сообщения:
    141
    Симпатии:
    35
    русский я понимаю с первого раза :)

    отслеживание медленных я включил, пусть работает конечно - не вопрос

    а анализатор зачем? запросы в логе же показываются

    кстати, а на сколько поставить long_query_time параметр? сейчас он у меня закомментирован.
     
  9. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Он группирует запросы - смотреть удобнее.

    Это уже тебе решать - ХЗ, что у тебя за база.

    При правильном проектировании БД, большинство запросов должны выполняться менее секунды. Но мускуль этого не понимает - время можно задать только от секунды и выше.

    Ну и не стоит забывать про опцию --log-queries-not-using-indexes

    Попробуй так
    [mysqld]
    log-slow-queries = sql_slow.log
    long_query_time = 1
    log-queries-not-using-indexes
     
    vredin нравится это.
  10. johndoe1

    johndoe1 Писатель

    Регистр.:
    17 май 2009
    Сообщения:
    4
    Симпатии:
    0
    У меня как-то лежал mysql...
    Тормозил select count(*).
    Вылечил конвертацией таблиц из InnoDB в MyISAM.
     
Статус темы:
Закрыта.