LINUX.ORG.RU

mysql и процессор 200%

 , , , ,


0

1

Здравствуйте. Ситуация следующая. Когда на сайте одновременных пользователей 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).

http://s017.radikal.ru/i422/1412/8f/a5e246f52c9e.jpg

забивается вся память, сайт начинает медленно работать

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

базируется на Yii

Кто делал сайт?

запрос

Более полезным был бы его explain

goingUp ★★★★★ ()
Последнее исправление: goingUp (всего исправлений: 2)

show create table 16%
show fields 16%

омг

goingUp ★★★★★ ()
Ответ на: комментарий от goingUp

Удваиваю explain всех медленных запросов. И ещё можно добавить логгирование всех запросов не использующих индекс (кажется это директива log-queries-not-using-indexes).
Что там с использованием памяти? Если есть излишек (с 8 гигов он вполне может быть) возможно стоит настроить мускуль на то что-бы он это излишек использовал под кеши.
Покажи free -m и ps ax -o rss,cmd | sort -n

P.S. а зачем apache?

MrClon ★★★★★ ()
Ответ на: комментарий от MrClon

вся статистика это в данный момент, когда особой нагрузки нету. Но периодически сам по себе взлетает проц mysql. По поводу apache, хочу перейти на php-fmp, но пока это сделать невозможно, из-за панели Vesta cp, которая не поддерживает php-fpm, разработчики активно занимаются внедрением готового шаблона с fpm для vesta.

free -m total used free shared buffers cached Mem: 8006 6352 1653 0 182 4559 -/+ buffers/cache: 1611 6395 Swap: 0 0 0

-----------

ps ax -o rss,cmd | sort -n 0 [ata_sff] 0 [bdi-default] 0 [cpuset] 0 [crypto] 0 [ext4-dio-unwrit] 0 [flush-254:0] 0 [fsnotify_mark] 0 [jbd2/vda1-8] 0 [kblockd] 0 [kdevtmpfs] 0 [khelper] 0 [khubd] 0 [khugepaged] 0 [khungtaskd] 0 [kintegrityd] 0 [ksmd] 0 [ksoftirqd/0] 0 [ksoftirqd/1] 0 [ksoftirqd/2] 0 [ksoftirqd/3] 0 [kswapd0] 0 [kthreadd] 0 [kworker/0:1] 0 [kworker/0:2] 0 [kworker/1:0] 0 [kworker/1:1] 0 [kworker/2:0] 0 [kworker/2:1] 0 [kworker/3:0] 0 [kworker/3:1] 0 [kworker/u:0] 0 [kworker/u:1] 0 [migration/0] 0 [migration/1] 0 [migration/2] 0 [migration/3] 0 [netns] 0 [scsi_eh_0] 0 [scsi_eh_1] 0 [sync_supers] 0 [vballoon] 0 [watchdog/0] 0 [watchdog/1] 0 [watchdog/2] 0 [watchdog/3] RSS CMD 152 /usr/sbin/atd 548 /usr/sbin/acpid 720 udevd --daemon 736 /bin/sh /usr/bin/mysqld_safe 756 init [2] 804 sort -n 856 ps ax -o rss,cmd 880 /sbin/getty 38400 tty1 880 /sbin/getty 38400 tty4 880 /sbin/getty 38400 tty6 884 /sbin/getty 38400 tty3 892 /sbin/getty 38400 tty2 892 /sbin/getty 38400 tty5 912 dovecot/anvil 912 udevd --daemon 936 /usr/sbin/dovecot -c /etc/dovecot/dovecot.conf 960 nginx: master process /usr/local/vesta/nginx/sbin/vesta-nginx 960 /usr/sbin/cron 1080 dovecot/log 1128 /usr/bin/dbus-daemon --system 1144 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf 1188 /usr/sbin/sshd 1336 udevd --daemon 1356 /usr/lib/gamin/gam_server 1408 /usr/sbin/vsftpd 1472 nginx: cache manager process 1680 /usr/sbin/exim4 -bd -q30m 2156 /usr/sbin/rsyslogd -c5 2740 php-fpm: master process (/usr/local/vesta/php/etc/php-fpm.conf) 2896 /usr/sbin/console-kit-daemon --no-daemon 2960 nginx: worker process 2984 nginx: worker process 3048 nginx: worker process 3092 nginx: worker process 3100 nginx: worker process 3284 -bash 3464 /usr/bin/freshclam -d --quiet --config-file=/etc/clamav/freshclam.conf 4040 sshd: root@pts/0 4248 /usr/sbin/apache2 -k start 4508 php-fpm: pool www 5032 php-fpm: pool www 5356 php-fpm: pool www 5528 php-fpm: pool www 5528 php-fpm: pool www 6296 php-fpm: master process (/etc/php5/fpm/php-fpm.conf) 8344 /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock 13356 /usr/sbin/named -u bind 17000 /usr/bin/php-cgi 17068 /usr/bin/php-cgi 17400 /usr/bin/php-cgi 17404 /usr/bin/php-cgi 17908 /usr/bin/php-cgi 17944 /usr/bin/php-cgi 17944 /usr/bin/php-cgi 17948 /usr/bin/php-cgi 17948 /usr/bin/php-cgi 17948 /usr/bin/php-cgi 17952 /usr/bin/php-cgi 18160 /usr/bin/php-cgi 18616 /usr/bin/php-cgi 18732 /usr/bin/php-cgi 18868 /usr/bin/php-cgi 18920 /usr/bin/php-cgi 18944 /usr/sbin/apache2 -k start 18976 /usr/bin/php-cgi 18980 /usr/sbin/apache2 -k start 19004 /usr/sbin/apache2 -k start 19040 /usr/bin/php-cgi 19108 /usr/bin/php-cgi 19196 /usr/bin/php-cgi 19256 /usr/bin/php-cgi 19280 /usr/bin/php-cgi 19420 /usr/bin/php-cgi 19440 /usr/sbin/apache2 -k start 19468 /usr/bin/php-cgi 19472 /usr/bin/php-cgi 19528 /usr/bin/php-cgi 19612 /usr/sbin/apache2 -k start 19752 /usr/bin/php-cgi 19792 /usr/bin/php-cgi 19824 /usr/bin/php-cgi 19828 /usr/bin/php-cgi 19856 /usr/bin/php-cgi 19900 /usr/sbin/apache2 -k start 19956 /usr/bin/php-cgi 19984 /usr/bin/php-cgi 20012 /usr/sbin/apache2 -k start 20064 /usr/bin/php-cgi 20096 /usr/sbin/apache2 -k start 20188 /usr/bin/php-cgi 20188 /usr/bin/php-cgi 20276 /usr/bin/php-cgi 20304 /usr/bin/php-cgi 20304 /usr/bin/php-cgi 20452 /usr/bin/php-cgi 20612 /usr/sbin/apache2 -k start 20616 /usr/bin/php-cgi 20660 /usr/bin/php-cgi 20708 /usr/bin/php-cgi 20728 /usr/bin/php-cgi 20816 /usr/bin/php-cgi 20824 /usr/bin/php-cgi 20896 /usr/bin/php-cgi 20940 /usr/bin/php-cgi 20940 /usr/bin/php-cgi 21012 /usr/bin/php-cgi 21100 /usr/bin/php-cgi 21156 /usr/bin/php-cgi 21208 /usr/bin/php-cgi 21372 /usr/sbin/apache2 -k start 21500 /usr/bin/php-cgi 21544 /usr/sbin/apache2 -k start 21660 /usr/sbin/apache2 -k start 21688 /usr/bin/php-cgi 21768 /usr/bin/php-cgi 21860 /usr/bin/php-cgi 21876 /usr/bin/php-cgi 21912 /usr/bin/php-cgi 21932 /usr/bin/php-cgi 22080 /usr/bin/php-cgi 22108 /usr/bin/php-cgi 22116 /usr/bin/php-cgi 22204 /usr/bin/php-cgi 22236 /usr/bin/php-cgi 22260 /usr/bin/php-cgi 22296 /usr/bin/php-cgi 22308 /usr/bin/php-cgi 22320 /usr/bin/php-cgi 22472 /usr/bin/php-cgi 22500 /usr/bin/php-cgi 22528 /usr/bin/php-cgi 22532 /usr/sbin/apache2 -k start 22548 /usr/bin/php-cgi 22568 /usr/bin/php-cgi 22644 /usr/bin/php-cgi 22724 /usr/bin/php-cgi 22724 /usr/bin/php-cgi 22764 /usr/bin/php-cgi 22912 /usr/bin/php-cgi 22936 /usr/bin/php-cgi 23008 /usr/bin/php-cgi 23168 /usr/bin/php-cgi 23216 /usr/bin/php-cgi 23240 /usr/bin/php-cgi 23316 /usr/bin/php-cgi 23320 /usr/bin/php-cgi 23328 /usr/bin/php-cgi 23348 /usr/bin/php-cgi 23420 /usr/bin/php-cgi 23440 /usr/bin/php-cgi 23464 /usr/bin/php-cgi 23532 /usr/bin/php-cgi 23548 /usr/bin/php-cgi 23684 /usr/sbin/apache2 -k start 23732 /usr/bin/php-cgi 23812 /usr/bin/php-cgi 23832 /usr/bin/php-cgi 24368 /usr/bin/php-cgi 24412 /usr/bin/php-cgi 24496 /usr/bin/php-cgi 24520 /usr/bin/php-cgi 24536 /usr/bin/php-cgi 24624 /usr/bin/php-cgi 24636 /usr/bin/php-cgi 24696 /usr/bin/php-cgi 24696 /usr/bin/php-cgi 24764 /usr/bin/php-cgi 24776 /usr/bin/php-cgi 24824 /usr/bin/php-cgi 24932 /usr/bin/php-cgi 24976 /usr/bin/php-cgi 25064 /usr/bin/php-cgi 25188 /usr/bin/php-cgi 25292 /usr/bin/php-cgi 25420 /usr/bin/php-cgi 25604 /usr/bin/php-cgi 25688 /usr/bin/php-cgi 25700 /usr/bin/php-cgi 25876 /usr/bin/php-cgi 26108 /usr/bin/php-cgi 26164 /usr/bin/php-cgi 26168 /usr/bin/php-cgi 26416 /usr/bin/php-cgi 26672 /usr/bin/php-cgi 26940 /usr/bin/php-cgi 27664 /usr/bin/php-cgi 30252 /usr/bin/php-cgi 53696 spamd child 55116 /usr/sbin/spamd --create-prefs --max-children 5 --helper-home-dir -d --pidfile =/var/run/spamd.pid 60988 spamd child 195768 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/li b/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run /mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 295324 /usr/sbin/clamd -c /etc/clamav/clamd.conf

roman17 ()
Ответ на: комментарий от roman17

сообщения подобного вида оборачивай в [code]тело сообщения[/code]

Написано ниже же

Внимание: прочитайте описание разметки LORCODE

Dron ★★★★★ ()
Ответ на: комментарий от roman17

Интересна инфа в момент высокой нагрузки. Если отлавливать лишний момент не хочется можно самому создать нагрузку, мало-ли утилит для стрестестов.

MrClon ★★★★★ ()
Ответ на: комментарий от MrClon

наверно все таки надо подключить memcached для yii, а потом уже искать что там нагружает проц и Apache, в большинстве подобных случаев все решается именно с кеш.

roman17 ()
Ответ на: комментарий от roman17

Мэмкэш это хорошо. Особенно хорошо если его можно подключить не переписывая всё приложение.
Но всё-же полезно разобраться в самой проблеме.

MrClon ★★★★★ ()
Ответ на: комментарий от Erfinder

mysqltuner пока пишет что настройки дефолтные правильные. Но все таки буфер выставил 1G. Хотя на загрузку процессора что =128 или =1G, не влияет...

[client]
port=3306
socket=/var/run/mysqld/mysqld.sock

[mysqld_safe]
socket=/var/run/mysqld/mysqld.sock

[mysqld]
log_slow_queries=/var/log/mysql/mysql-slow.log
long_query_time=10
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
port=3306
basedir=/usr
datadir=/var/lib/mysql
tmpdir=/tmp
lc-messages-dir=/usr/share/mysql
log_error=/var/log/mysql/error.log
max_connections=200
max_user_connections=30
wait_timeout=30
interactive_timeout=50
long_query_time=5
innodb_file_per_table
innodb_buffer_pool_size=1G

!includedir /etc/mysql/conf.d/
roman17 ()
Ответ на: комментарий от Erfinder
select	235 k	130.917 k	53.90%
show fields	79 k	43.718 k	18.00%
show create table	79 k	43.718 k	18.00%
update	14 k	8.042 k	3.31%
delete	14 k	8.017 k	3.30%
set option	14 k	7.886 k	3.25%

insert	1,024	569.328	0.23%
show status	30	16.680	0.01%
show plugins	9	5.004	0.00%
admin commands	8	4.448	0.00%
show binlogs	5	2.780	0.00%
show slave status	3	1.668	0.00%

http://s011.radikal.ru/i317/1412/63/bf7e54971905.jpg

roman17 ()
Ответ на: комментарий от roman17

Выполни explain <запрос из ОП> и покажи результат. Вообще оптимизацией запросов должен заниматься разработчик, а не админ.

goingUp ★★★★★ ()
Ответ на: комментарий от roman17

Копируешь запрос, вставляешь в начало слово explain, и выполняешь в mysql клиенте, например консольном или phpmyadmin.

goingUp ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.