Задавайте вопросы, мы ответим
Вы не зашли.
Стало виснуть MySQL
в top вижу процес mysql доходит по памяти до 528-612MB и зависает
свободной памяти еще остается 240 mb
помогает service mysqld restart и работет пока память вновь не подберется к 600
Все настройки уже перепробовал, что можно еще сделать? Можно как то сделать чтобы mysql сам перезагружался когда используюмая память подходит к 500mb?
вот так он виснет только тут 205 mb он в самом начале пока не разогнался тоже виснет а намертво когда уже 500-600
имею
VPS
CentOS Mysql 5
процессор 4×1000
память 2GB
форумы phpBB3
две базы 1.8Gb и 0.3Gb
my.cnf
Отредактированно Jabali (21.06.2010 13:01:42)
Неактивен
Попробуйте уменьшить key_buffer_size — основная память утекает именно
туда. Скорее всего, проблема не у Вас, а у хостера — Вы не видите, что
реально происходит на машинке. Есть большое подозрение, что машинка
улезает в swap и поэтому начинает тормозить.
Еще интересное наблюдение — у Вас (при том, что MySQL сожрал лишь
10% ОЗУ) вся память забита. Чем? Апачи? 90 штук?
Неактивен
А Mysqld разве не резервирует всю память (та что по настрйокам получается) под себя? вот она и висит 1650 mb VIRT
Уменьшил key_buffer_size до 650 mb смотрю! Сейчас в top он показывает всего 950 mb VIRT и RES 88mb(растёт - а с предыдушими настрйокмаи он начинал с 170mb)
Да нет апаче не особо нагружает - в подвисании апаче как то тоже участвует когда вешается MYSQL то апаче отдает html пока все не заполнять неотвечанные запросы с форума по php и вот тут всё виснет! Но свободная память всё равно остается!
У меня vps от hc.ru там один ответ на всё "вы купили vps должны сами решать все проблемы" - не хорошие люди! Я тоже думаю что это у них с их виртуозами виртуализации и даже то что заявленно по ресурсам не работает!
Отредактированно Jabali (21.06.2010 15:23:19)
Неактивен
Выделенная память и используемая память — это разные вещи. В Linux выделить
памяти можно практически сколько угодно (можете, например, написать программу,
которая, выделит терабайт — вполне себе нормальное действие), но вот использо-
вать реально всю эту память получится не всегда.
Неактивен
После уменьшения key_buffer_size до 650 теперь зависло когда дошло до 214 mb.... что еще можно попробовать научного? Мне только один выход видетяс перезагружать MYSQL каждые 10 часов :@))))))
Неактивен
Поставьте atop, сделайте снимки раз в минуту, пусть поснимает систему.
Интересно распределение памяти на время подвисания.
Неактивен
С atop у меня возникли какието проблемы устанвоил вместо него mytop
Для centos инструкция если кому вдруг http://www.sohailriaz.com/how-to-instal … for-mysql/
И так повезло что сервер как раз начал виснут
далее результат mytop, top, и my.cnf
http://s49.radikal.ru/i124/1006/75/70f2192f6e0d.png
http://s60.radikal.ru/i169/1006/9f/29dfb9a10f19.png
Неактивен
atop и mytop — это разные вещи. Но по крайней мере видно, что сервер
таки у Вас не виснет
mysql -e "show processlist" >filename
и потом в файлике смотрите, какие процессы что едят. Интересует состояние
тех процессов, которые должны быть точечными, но выполняются по 120
секунд. Если waiting for table (рабочее предположение), то ищите того, кто
блокирует таблицы.
Неактивен
Это надо сделать когда зависнет? Жду!
То есть что поулчеатся Mysql работатает но не отвечает и сайт виснет потому что в apache переполняются подключения не отвеченные запросы форума? Кто виноват то?
Отредактированно Jabali (22.06.2010 12:58:16)
Неактивен
«Кто виноват» и «что делать» — это два самых интересных вопроса жизни
Как только найдете того, кто блокирует таблицы, найдете и того, кто виноват.
Ну, и решите, что делать
Неактивен
1. Ну воздействие третей стороны или физ лиц я исключаю полностью - потому что виснет на оперделенном уровне памяти который завист от настроек!
2. MYSQL я подозреваю потому что после перезагрузки оного все работает до смертельного уровня памяти см. выше!
3. ... что делать прям не знаю, обычно хостер денег просит а тут не гворят ни почему ни что надо сделать чтобы этого не было
Жду завиания запустил:
top
atop
atop -m
mytop
Неактивен
/usr/bin/atop -a -w /var/log/atop.log 60 Будет писать atop.log, который потом можно будет
читать. Вполне себе удобно, чтобы не отслеживать глазами.
Неактивен
paulus написал:
/usr/bin/atop -a -w /var/log/atop.log 60 Будет писать atop.log, который потом можно будет
читать. Вполне себе удобно, чтобы не отслеживать глазами.
Пишет! Но как остановить не знал перезагрузился! :@)))))
У меня новая версия!
atop в первые секунды после включения показал странные данные, может быть зависание связано с переполнением MYSQL hdd??? У меня свободно 11gb
Отредактированно Jabali (23.06.2010 09:46:16)
Неактивен
А со списком процессов в MySQL то что?
Неактивен
А он пока не вис при мне, но я уменьшил в два раза процесы Apache в my.cnf тоже что то уменьшил, но в основном апаче
про Mysql процессы что надо в atop набирать когда он зависнит?
Отредактированно Jabali (23.06.2010 15:29:30)
Неактивен
mysql -e "show processlist". Там должна быть куча запросов одинаковых,
которые ждут таблицу, и один, который не одинаковый, — который ее
блокирует
Неактивен
вот сейчас сшастливо завис на 557 mb и отвис быстро не считается за обычное зависание долго он уже работает больеш 12 часов
mysql -e "show processlist"
+--------+---------+-----------+---------+---------+------+----------------------+------------------------------------------------------------------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+--------+---------+-----------+---------+---------+------+----------------------+------------------------------------------------------------------------------------------------------+
| 190598 | mfora7d | localhost | mfora7d | Query | 166 | Copying to tmp table | SELECT f.*, t.*, p.*, u.* FROM (phpbb_posts p, phpbb_users u, phpbb_topics t) LEFT JOIN phpbb_forums |
| 190600 | mfora7d | localhost | mfora7d | Query | 164 | Locked | UPDATE phpbb_topics
SET topic_views = topic_views + 1, topic_last_view_time = 1277295037
WHERE t |
| 190601 | mfora7d | localhost | mfora7d | Query | 162 | Locked | SELECT t.*, f.* FROM (phpbb_forums f, phpbb_topics t) WHERE t.topic_id = 4983 AND (f.forum_id = t.fo |
| 190602 | mfora7d | localhost | mfora7d | Query | 162 | Locked | SELECT forum_id
FROM phpbb_topics
WHERE topic_id = 4643 |
| 190603 | mfora7d | localhost | mfora7d | Query | 162 | Locked | SELECT t.*, f.* FROM (phpbb_forums f, phpbb_topics t) WHERE t.topic_id = 8509 AND (f.forum_id = t.fo |
| 190604 | mfora7d | localhost | mfora7d | Query | 162 | Locked | SELECT t.*, f.*, tw.notify_status, bm.topic_id as bookmarked, tt.mark_time, ft.mark_time as forum_ma |
| 190605 | mfora7d | localhost | mfora7d | Query | 161 | Locked | SELECT t.*, tp.topic_posted, tt.mark_time FROM (phpbb_topics t) LEFT JOIN phpbb_topics_posted tp ON |
| 190606 | mfora7d | localhost | mfora7d | Query | 160 | Locked | SELECT t.*, f.* FROM (phpbb_forums f, phpbb_topics t) WHERE t.topic_id = 8701 AND (f.forum_id = t.fo |
| 190607 | mfora7d | localhost | mfora7d | Query | 160 | Locked | SELECT t.*, f.*, tw.notify_status, bm.topic_id as bookmarked, tt.mark_time, ft.mark_time as forum_ma |
| 190608 | mfora7d | localhost | mfora7d | Query | 159 | Locked | SELECT t.*, tp.topic_posted, tt.mark_time FROM (phpbb_topics t) LEFT JOIN phpbb_topics_posted tp ON |
| 190609 | mfora7d | localhost | mfora7d | Query | 159 | Locked | SELECT t.*, tp.topic_posted, tt.mark_time FROM (phpbb_topics t) LEFT JOIN phpbb_topics_posted tp ON |
| 190611 | mfora7d | localhost | mfora7d | Query | 156 | Locked | SELECT t.*, f.* FROM (phpbb_forums f, phpbb_topics t) WHERE t.topic_id = 3790 AND (f.forum_id = t.fo |
| 190612 | mfora7d | localhost | mfora7d | Query | 154 | Locked | SELECT t.*, f.* FROM (phpbb_forums f, phpbb_topics t) WHERE t.topic_id = 5384 AND (f.forum_id = t.fo |
| 190613 | mfora7d | localhost | mfora7d | Query | 153 | Locked | UPDATE phpbb_users
SET user_lastvisit = 1277295048
WHERE user_id = 39801 |
| 190614 | mfora7d | localhost | mfora7d | Query | 153 | Locked | SELECT u.*, s.*
FROM phpbb_sessions s, phpbb_users u
WHERE s.session_id = '81da39bf2483a2422 |
| 190615 | mfora7d | localhost | mfora7d | Query | 152 | Locked | SELECT u.*, s.*
FROM phpbb_sessions s, phpbb_users u
WHERE s.session_id = '6aa8fec108b46fdde |
| 190616 | mfora7d | localhost | mfora7d | Query | 151 | Locked | SELECT u.*, s.*
FROM phpbb_sessions s, phpbb_users u
WHERE s.session_id = '3072e03e688308a4d |
| 190617 | mfora7d | localhost | mfora7d | Query | 151 | Locked | SELECT u.*, s.*
FROM phpbb_sessions s, phpbb_users u
WHERE s.session_id = 'f23d89c54b8952f74 |
| 190618 | mfora7d | localhost | mfora7d | Query | 147 | Locked | SELECT u.*, s.*
FROM phpbb_users u
LEFT JOIN phpbb_sessions s ON (s.session_user_id = u.us |
| 190619 | mfora7d | localhost | mfora7d | Query | 144 | Locked | SELECT u.*, s.*
FROM phpbb_sessions s, phpbb_users u
WHERE s.session_id = 'a3b24deec1b3d87aa |
| 190620 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+--------+---------+-----------+---------+---------+------+----------------------+------------------------------------------------------------------------------------------------------+
-bash-3.1#
После отвисания
mysql -e "show processlist"
+--------+---------+-----------+---------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+--------+---------+-----------+---------+---------+------+-------+------------------+
| 191238 | mfora7d | localhost | mfora7d | Sleep | 3 | | NULL |
| 191242 | mfora7d | localhost | mfora7d | Sleep | 2 | | NULL |
| 191249 | mfora7d | localhost | mfora7d | Sleep | 1 | | NULL |
| 191251 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+--------+---------+-----------+---------+---------+------+-------+------------------+
Отредактированно Jabali (23.06.2010 16:15:33)
Неактивен
| 190598 | mfora7d | localhost | mfora7d | Query | 166 | Copying to tmp table | SELECT f.*, t.*, p.*, u.* FROM (phpbb_posts p, phpbb_users u, phpbb_topics t) LEFT JOIN phpbb_forums |
Собственно, вот он — обидчик. 166 секунд выбирает данные из табличек.
Нужно оптимизировать запрос
Да, InnoDB в данном случае спасет, но запрос все равно лучше соптими-
зировать, т.к. он не очень хороший (полный запрос можно посмотреть
через SHOW FULL PROCESSLIST).
Неактивен
Спасибо! Предеам это PHPБэБистам - пока буду думать как перевсти phpBB из MyISAM в InnoDB елси они уже не там...
Неактивен
mysql -NBe "show tables" mfora7d | xargs -i@ mysql -e "alter table @ engine=innodb" mfora7d
Но только сначала включите движок и выдайте ему памяти
Неактивен
Innodb есть
| Engine | Support | Comment |
+------------+----------+----------------------------------------------------------------+
| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables |
| InnoDB | YES | Supports transactions, row-level locking, and foreign keys |
| BerkeleyDB | DISABLED | Supports transactions and page-level locking |
| BLACKHOLE | NO | /dev/null storage engine (anything you write to it disappears) |
| EXAMPLE | NO | Example storage engine |
| ARCHIVE | NO | Archive storage engine |
| CSV | NO | CSV storage engine |
| ndbcluster | NO | Clustered, fault-tolerant, memory-based tables |
| FEDERATED | NO | Federated MySQL storage engine |
| MRG_MYISAM | YES | Collection of identical MyISAM tables |
| ISAM | NO | Obsolete storage engine
но когда ему в my.cnf что то прописываю он не загружает mysql превышено время ожидания
#skip-innodb
skip-bdb
innodb_buffer_poll_size=256M
innodb_additional_mem_pool_size=20M
innodb_log_file_size=12M
innodb_log_buffer_size=4
innodb_thread_concurrency=8
Отредактированно Jabali (23.06.2010 17:11:58)
Неактивен
загрузил с дефолтными my innodn 4g только там местами где было много уменньшил в два раза
Неактивен
Даже боюсь себе предположить, что будет делать InnoDB с буфером лога
в 4 байта... удивлен, что он вообще запускается
innodb_flush_log_at_trx_commit = 0 еще поставьте. А буфер лога — ну хотя
бы 8 мегабайт нужно
Неактивен
После коорденального изменений my.cnf на слегка измененный дефолтный (я в шоке кей буфер всего 32 м и работает :@))) а бывало по 1GB) жду зависания... понять что теперь работает innodb трудно но я никакх ддоп строк не запускал в настройках он включен
У меня еще такой философский вопрос какой параметр может влиять на скорость дополнения поста в форум после наджатия кнопки отправить?
Неактивен
Много разных. InnoDB это тоже починит (не будете ждать завершения вот того
длинного SELECT).
Неактивен