SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.03.2011 15:51:43

_Сергей
Завсегдатай
Зарегистрирован: 26.11.2008
Сообщений: 36

При запросе, Out of memory. На слейве.

Здравствуйте.

Система FreeBsd 8.0 i386, mysql 5.1.47 RAM 3Gb
таблицы InnoDB
Служит он слейвом. Сейчас слейв остановился

110315 14:26:30 [ERROR] /usr/local/libexec/mysqld: Out of memory (Needed 870552 bytes)
110315 14:26:30 [ERROR] Out of memory; check if mysqld or some other process uses all available memory; if not, you may have to use 'ulimit' to allow mysqld to use more memory or you can add more swap space
110315 14:26:30 [ERROR] Slave SQL: Error 'Out of memory (Needed 870552 bytes)' on query. Default database: 'api'. Query: 'DELETE FROM `product-popularity-index` WHERE `region-id`=2 AND NOT ( `product-id`=116
00 ) AND NOT ( `product-id`=816544 ) AND NOT ( `product-id`=814085 ) AND NOT ( `product-id`=813023 ) AND NOT ( `product-id`=811980 ) AND NOT ( `product-id`=819824 ) AND NOT ( `product-id`=820237 ) AND NOT (
`product-id`=9403 ) AND NOT ( `product-id`=820791 ) AND NOT ( `product-id`=815594 ) AND NOT ( `product-id`=205 ) AND NOT ( `product-id`=811977 ) AND NOT ( `product-id`=818985 ) AND NOT ( `product-id`=7116 )
AND NOT ( `product-id`=813236 ) AND NOT ( `product-id`=11804 ) AND NOT ( `product-id`=10738 ) AND NOT ( `product-id`=813541 ) AND NOT ( `product-id`=821581 ) AND NOT ( `product-id`=812676 ) AND NOT ( `produc
t-id`=11852 ) AND NOT ( `product-id`=812258 ) AND NOT ( `product-id`=822626 ) AND NOT ( `product-id`=811803 ) AND NOT ( `product-id`=822938 ) AND NOT ( `product-id`=8597 ) AND NOT ( `product-id`=811130 ) AND
NOT ( `prod
110315 14:26:30 [Warning] Slave: Out of memory (Needed 870552 bytes) Error_code: 5


В интернете рекомендации - увеличить память которая выделяется для процесса
kern.maxdsiz="1073741824" # 1GB
kern.dfldsiz="1073741824" # 1GB
kern.maxssiz="134217728" # 128MB

по шагам увеличивал эти параметры и довел их до

kern.maxdsiz="2G"
kern.dfldsiz="2G"
kern.maxssiz="1G"

не помогает.
максимум что могу выставить innodb_buffer_pool_size = 1152M

больше не знаю что поправить.
Есть решение без перехода на amd64 и увеличения памяти больше 4 Гб?

Спасибо.

Отредактированно _Сергей (15.03.2011 15:52:00)

Неактивен

 

#2 15.03.2011 16:32:44

_Сергей
Завсегдатай
Зарегистрирован: 26.11.2008
Сообщений: 36

Re: При запросе, Out of memory. На слейве.

Вот нашел в интернете интересую мысль

perror 5
Input/output error

На диске действительно не очень много места. Причем когда я зашел на сервер места не было вообще, я осовбодил 4 гига, сейчас из них свободно 2.4 гига.
Уж не с этим ли связано?

Неактивен

 

#3 16.03.2011 11:04:06

_Сергей
Завсегдатай
Зарегистрирован: 26.11.2008
Сообщений: 36

Re: При запросе, Out of memory. На слейве.

с этим не связано. на другом слейве. места много а ошибка таже.

Неактивен

 

#4 17.03.2011 00:33:39

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: При запросе, Out of memory. На слейве.

Меня пугают слова FreeBSD и i386. Если первое — это потенциальные проблемы
(и если сборка не из портов, то, вроде, проблемы исчезают), то второе — это силь-
ные ограничения по памяти, причем связаны с объективной реальностью — Вы
не можете выделить более 3 гигабайт на процесс на 32-битных системах (а на
некоторых системах и более 2 гигабайт).

Ощущение, что Вы упираетесь именно в это ограничение. Ну и решение — умень-
шить innodb_buffer_pool_size, key_buffer, etc так, чтобы не вылезать за разумные
пределы, ну и впоследствии менять битность ОС.

Неактивен

 

#5 17.03.2011 10:51:20

_Сергей
Завсегдатай
Зарегистрирован: 26.11.2008
Сообщений: 36

Re: При запросе, Out of memory. На слейве.

paulus написал:

Меня пугают слова FreeBSD и i386.

Да ладно! БСД нормальная штука.
Но я о другом.
Ну вы просто монстр! Все зарабтало после уменьшения key_buffer. Снимаю шляпу. Спасибо.

Неактивен

 

#6 21.03.2011 12:26:51

_Сергей
Завсегдатай
Зарегистрирован: 26.11.2008
Сообщений: 36

Re: При запросе, Out of memory. На слейве.

Подскажите пожалуйста еще вот по какому вопросу. Пока я устранял эту ошибку, с вашей помощью, видимо накопилось много информации. Диск в 53 гига забыт. На этом диске только база мускуля и больне ничего. Основное места занимают relay логи. сейчас позиция
Relay_Log_File: relay_rep_slave2.001555
Relay_Log_Pos: 316701878

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

Неактивен

 

#7 23.03.2011 00:21:52

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: При запросе, Out of memory. На слейве.

А что говорит SHOW SLAVE STATUS? Может, просто репликация остановилась?

Да, в любом случае сделайте пока STOP SLAVE IO_THREAD — так не будут
приезжать новые логи, пока не решите проблему (но и репликация работать
не будет, разумеется).

Неактивен

 

#8 23.03.2011 12:26:34

_Сергей
Завсегдатай
Зарегистрирован: 26.11.2008
Сообщений: 36

Re: При запросе, Out of memory. На слейве.

paulus написал:

Может, просто репликация остановилась?

Да репликация остановилась места на диске нет вообще.


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


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

Спасибо.

Неактивен

 

#9 24.03.2011 01:15:37

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: При запросе, Out of memory. На слейве.

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

Неактивен

 

#10 25.03.2011 09:57:38

_Сергей
Завсегдатай
Зарегистрирован: 26.11.2008
Сообщений: 36

Re: При запросе, Out of memory. На слейве.

paulus написал:

Ну, если Вы не хотите написать подробности

Какие подробности в такой ситуации нужны? Проблема в дисковым простанством конфиги в такой ситуации вроде как и не нужны. Ошибка в логе....ну дык места нет. Схему вроде обрисовал мастер и два слейва. Намекните какие подробности нужны

Неактивен

 

#11 25.03.2011 10:09:25

_Сергей
Завсегдатай
Зарегистрирован: 26.11.2008
Сообщений: 36

Re: При запросе, Out of memory. На слейве.

перечитал еще раз доку по репликации
там написано
The relay log consists of the events read from the binary log of the master and written by the slave I/O thread.
Слово выделил не зря. Получается что в релай логах уже обработанные запросы и их можно удалить. Ну само-собой поправить индекс файл, или через change master передвинуть позицию, или reset slave

Неактивен

 

#12 25.03.2011 15:19:05

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: При запросе, Out of memory. На слейве.

Ну, например, Вы не написали, почему остановилась репликация. Это можно пос-
мотреть, например, в SHOW SLAVE STATUS (сообщение №7).

Relay log стереть можно, но тогда репликация гарантированно сломается. Туда
пишутся еще не выполненные события.

Неактивен

 

#13 28.03.2011 10:02:13

_Сергей
Завсегдатай
Зарегистрирован: 26.11.2008
Сообщений: 36

Re: При запросе, Out of memory. На слейве.

вот сообщение из лога мускуля

110318 17:49:14 [ERROR] /usr/local/libexec/mysqld: Disk is full writing '/v1/db/mysql/relay_rep_slave2.001776' (Errcode: 28). Waiting for someone to free space... (Expect up to 60 secs delay for server to co
ntinue after freeing disk space)


вот show slave status


mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Queueing master event to the relay log
                  Master_Host: 174.120.210.74
                  Master_User: rep_api
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000511
          Read_Master_Log_Pos: 129548576
               Relay_Log_File: relay_rep_slave2.001555
                Relay_Log_Pos: 316701878
        Relay_Master_Log_File: mysql-bin.000456
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
              Replicate_Do_DB: api
          Replicate_Ignore_DB: mysql,test
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 5
                   Last_Error: Error 'Out of memory (Needed 1582452 bytes)' on query. Default database: 'api'. Query: 'DELETE FROM `product-popularity-index` WHERE `region-id`=2 AND NOT ( `product-id`=11600 ) AND NOT ( `product-id`=816544 ) AND NOT ( `product-id`=814085 ) AND NOT ( `product-id`=813023 ) AND NOT ( `product-id`=811980 ) AND NOT ( `product-id`=819824 ) AND NOT ( `product-id`=820237 ) AND NOT ( `product-id`=9403 ) AND NOT ( `product-id`=820791 ) AND NOT ( `product-id`=815594 ) AND NOT ( `product-id`=205 ) AND NOT ( `product-id`=811977 ) AND NOT ( `product-id`=818985 ) AND NOT ( `product-id`=7116 ) AND NOT ( `product-id`=813236 ) AND NOT ( `product-id`=11804 ) AND NOT ( `product-id`=10738 ) AND NOT ( `product-id`=813541 ) AND NOT ( `product-id`=821581 ) AND NOT ( `product-id`=812676 ) AND NOT ( `product-id`=11852 ) AND NOT ( `product-id`=812258 ) AND NOT ( `product-id`=822626 ) AND NOT ( `product-id`=811803 ) AND NOT ( `product-id`=822938 ) AND NOT ( `product-id`=8597 ) AND NOT ( `product-id`=811130 ) AND NOT ( `product-id`=81
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 316701733
              Relay_Log_Space: 54202959407
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 5
               Last_SQL_Error: Error 'Out of memory (Needed 1582452 bytes)' on query. Default database: 'api'. Query: 'DELETE FROM `product-popularity-index` WHERE `region-id`=2 AND NOT ( `product-id`=11600 ) AND NOT ( `product-id`=816544 ) AND NOT ( `product-id`=814085 ) AND NOT ( `product-id`=813023 ) AND NOT ( `product-id`=811980 ) AND NOT ( `product-id`=819824 ) AND NOT ( `product-id`=820237 ) AND NOT ( `product-id`=9403 ) AND NOT ( `product-id`=820791 ) AND NOT ( `product-id`=815594 ) AND NOT ( `product-id`=205 ) AND NOT ( `product-id`=811977 ) AND NOT ( `product-id`=818985 ) AND NOT ( `product-id`=7116 ) AND NOT ( `product-id`=813236 ) AND NOT ( `product-id`=11804 ) AND NOT ( `product-id`=10738 ) AND NOT ( `product-id`=813541 ) AND NOT ( `product-id`=821581 ) AND NOT ( `product-id`=812676 ) AND NOT ( `product-id`=11852 ) AND NOT ( `product-id`=812258 ) AND NOT ( `product-id`=822626 ) AND NOT ( `product-id`=811803 ) AND NOT ( `product-id`=822938 ) AND NOT ( `product-id`=8597 ) AND NOT ( `product-id`=811130 ) AND NOT ( `product-id`=81
1 row in set (0.00 sec)

mysql>

Неактивен

 

#14 28.03.2011 17:56:02

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: При запросе, Out of memory. На слейве.

Ну, вот видите: реплика остановилась, потому что не хватило памяти.
Та же проблема с 32 битами?

Неактивен

 

#15 29.03.2011 13:04:12

_Сергей
Завсегдатай
Зарегистрирован: 26.11.2008
Сообщений: 36

Re: При запросе, Out of memory. На слейве.

paulus написал:

Ну, вот видите: реплика остановилась

ну как бороться с памятью мы уже выяснили с вашей помощью.
вопрос как освободить место на диске безболезненно sad

Неактивен

 

#16 29.03.2011 17:49:36

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: При запросе, Out of memory. На слейве.

Волшебной пилюли нет — у Вас есть данные и у Вас есть двоичные журналы,
которые предстоит накатить. Если Вы сотрете данные — Вы потеряете данные.
Если Вы сотрете двоичные журналы — Вы не сможете их накатить, а значит —
потеряете данные.

Если есть возможность утащить какой-то из файликов на другой раздел — мож-
но остановить mysql, утащить файлик, поставить в обратное место символичес-
кую ссылку, запустить mysql со --skip-slave-start, запустить только SQL-поток
репликации вручную (START SLAVE SQL_THREAD): так Вы будете накатывать (и
со временем — удалять) уже записанные двоичные журналы. Как только запус-
тите IO_THREAD — поедут новые журналы с мастера на тот же самый диск.

Ну или просто перелить реплику при большом отставании бывает часто проще.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson