Здравствуйте. Ситуация следующая. Когда на сайте одновременных пользователей 100-150, то mysql загружает даже не на 100, а на 170-200% процессор, это в top. Как результат, все это бегом в apache, и забивается вся память, сайт начинает медленно работать, долго грузятся страницы. (базируется на Yii). Сервер 8гб, 4ядра, ssd, php 5.5, Nginx + Apache + fastcgi. Debian 7 x64.
slow log.
use mysql; SET timestamp=1418027497; SELECT wall_entry.* FROM wall_entry LEFT JOIN content ON wall_entry.content_id = content.id LEFT JOIN user creator ON creator.id = content.created_by LEFT JOIN activity ON content.object_id=activity.id AND content.object_model = 'Activity' LEFT JOIN wall ON wall.id = wall_entry.wall_id LEFT JOIN space_membership ON wall.object_id = space_membership.space_id AND space_membership.user_id='4628' AND space_membership.status=3
WHERE creator.status = 1 AND content.object_model = 'Activity' AND content.user_id != '4628' AND wall_entry.wall_id IN ( SELECT uf.wall_id FROM user_follow LEFT JOIN user uf ON uf.id=user_follow.object_id AND user_follow.object_model='User' WHERE user_follow.user_id='4628' AND uf.wall_id is NOT NULL UNION SELECT sf.wall_id FROM user_follow LEFT JOIN space sf ON sf.id=user_follow.object_id AND user_follow.object_model='Space' WHERE user_follow.user_id='4628' AND sf.wall_id IS NOT NULL UNION SELECT sm.wall_id FROM space_membership LEFT JOIN space sm ON sm.id=space_membership.space_id WHERE space_membership.user_id='4628' AND sm.wall_id IS NOT NULL UNION SELECT 7157 ) AND ( (wall.object_model='user' AND content.visibility = 0 AND content.user_id = '4628') OR (wall.object_model='space' AND content.visibility = 0 AND space_membership.status = 3) OR (content.visibility = 1 OR content.visibility IS NULL) ) AND (content.archived != 1 OR content.archived IS NULL)
ORDER BY wall_entry.id DESC LIMIT 10;
----------------
phpmyadmin
Slow_queries 43 Количество запросов, выполнявшихся более long_query_time секунд.
Innodb_buffer_pool_reads 2.6 k Количество последовательных запросов на чтение, которые InnoDB не смог выполнить из буферного пула и использовал постраничное чтение.
Innodb_row_lock_waits 5 Общее количество ожиданий блокировки строк.
Handler_read_rnd 43.9 k Количество запросов, на чтение строки, основанных на ее позиции. Большое значение переменной может быть обусловлено частым выполнением запросов использующих сортировку результата, выполнением большого числа запросов требующих полного сканирования таблиц, наличием объединений не использующих индексы надлежащим образом.
Handler_read_rnd_next 6.2 G Количество запросов на чтение следующей строки из файла данных. Данное значение будет высоким, при частом сканировании таблиц. Обычно это означает, что таблицы не проиндексированы надлежащим образом или запросы не используют преимущества индексов.
Created_tmp_disk_tables 103.6 k Количество временных таблиц, автоматически созданных сервером на диске, во время выполнения SQL-выражений. Если значение Created_tmp_disk_tables велико, следует увеличить значение переменной tmp_table_size, чтобы временные таблицы располагались в памяти, а не на жестком диске.
Opened_tables 440 Общее количество открывавшихся таблиц. При большом значении переменной рекомендуется увеличить размер кеша таблиц (table_cache).