SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 04.06.2008 23:41:00

shutdown
Завсегдатай
Зарегистрирован: 29.05.2008
Сообщений: 46

значение статусных переменыых

У меня в статусе довольно большое значение переменной opened_tables - порядка десятков  тысяч. В то же время open_tables - сотни. Из документации (в комментариях) следует, что opened_tables увеличивается, когда серверу не хватает файловых дескрипторов для таблиц и он все же превышает значение, указанное в table_open_cache. У меня оно - 2000 при max_connections=300 (одновременно открывается не более 5 таблиц в запросе). Поясните, пожалуйста, значение этих переменных подробнее и о чем может говорить стремительный рост opened_tables?
Действительно ли это число увеличивается при использовании временных таблиц (они активно используются в моих запросах)

Неактивен

 

#2 05.06.2008 01:19:53

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: значение статусных переменыых

Вы все правильно описали. В переменной table_cahe задается максимальное число одновременно открытых таблиц. Возможные причины
1. у Вас много временных таблиц создается/удаляется и они MyISAM
2. есть лимит в файловой системе на максимальное число открытых файлов (редко, но бывает на VDS), см


sysctl -a
 

Неактивен

 

#3 05.06.2008 15:07:52

shutdown
Завсегдатай
Зарегистрирован: 29.05.2008
Сообщений: 46

Re: значение статусных переменыых

у меня под нагрузкой в логах вылазит вот что:

080605  1:57:38 [ERROR] /usr/sbin/mysqld: Can't open file: './WordIndex.frm' (errno: 24)
080605  1:57:38 [ERROR] /usr/sbin/mysqld: Can't open file: './WordIndex.frm' (errno: 24)
080605  1:57:38 [ERROR] /usr/sbin/mysqld: Can't open file: './WordIndex.frm' (errno: 24)
080605  1:57:38 [ERROR] /usr/sbin/mysqld: Can't open file: './WordIndex.frm' (errno: 24)
080605  1:57:38 [ERROR] /usr/sbin/mysqld: Can't open file: './WordIndex.frm' (errno: 24)
080605  1:57:38 [ERROR] /usr/sbin/mysqld: Can't open file: './WordIndex.frm' (errno: 24)
080605  1:59:01 [ERROR] Error in accept: Too many open files
080605  2:03:18 [ERROR] Error in accept: Too many open files
080605  2:07:34 [ERROR] Error in accept: Too many open files

как лечится? влияют ли на это значения max_tmp_tables и т.д. или только ограничения ОС?

может это поможет разобраться:
-- переменные:
max_allowed_packet              | 1048576                               |
| max_binlog_cache_size           | 18446744073709551615                  |
| max_binlog_size                 | 1073741824                            |
| max_connect_errors              | 10                                    |
| max_connections                 | 300                                   |
| max_delayed_threads             | 20                                    |
| max_error_count                 | 64                                    |
| max_heap_table_size             | 16777216                              |
| max_insert_delayed_threads      | 20                                    |
| max_join_size                   | 18446744073709551615                  |
| max_length_for_sort_data        | 1024                                  |
| max_prepared_stmt_count         | 16382                                 |
| max_relay_log_size              | 0                                     |
| max_seeks_for_key               | 18446744073709551615                  |
| max_sort_length                 | 1024                                  |
| max_sp_recursion_depth          | 0                                     |
| max_tmp_tables                  | 32                     

-- global status:
Created_tmp_disk_tables           | 58778     |
| Created_tmp_files                 | 134       |
| Created_tmp_tables                | 59594

-- mysqladmin debug:
Table status:
Opened tables:      95492
Open tables:          866
Open files:           882
Open streams:           0

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

Отредактированно shutdown (07.07.2008 15:22:48)

Неактивен

 

#4 05.06.2008 15:23:01

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: значение статусных переменыых

Это ошибка ОС - не хватает файловых дескрипторов. Что выдает  sysctl -a

Какая ОС? У Вас VDS?

Неактивен

 

#5 05.06.2008 15:37:06

shutdown
Завсегдатай
Зарегистрирован: 29.05.2008
Сообщений: 46

Re: значение статусных переменыых

ось -
Linux 2.6.18-8.el5 #1 SMP x86_64 x86_64 x86_64 GNU/Linux

sysctl

fs.mqueue.msgsize_max = 8192
fs.mqueue.msg_max = 10
fs.mqueue.queues_max = 256
fs.quota.warnings = 1
fs.quota.syncs = 25
fs.quota.free_dquots = 0
fs.quota.allocated_dquots = 0
fs.quota.cache_hits = 0
fs.quota.writes = 0
fs.quota.reads = 0
fs.quota.drops = 0
fs.quota.lookups = 0
fs.suid_dumpable = 0
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_watches = 8192
fs.inotify.max_user_instances = 128
fs.aio-max-nr = 65536
fs.aio-nr = 0
fs.lease-break-time = 45
fs.dir-notify-enable = 1
fs.leases-enable = 1
fs.overflowgid = 65534
fs.overflowuid = 65534
fs.dentry-state = 8546  6312    45      0       0       0
fs.file-max = 101182
fs.file-nr = 2040       0       101182
fs.inode-state = 3928   1111    0       0       0       0       0
fs.inode-nr = 3928      1111
fs.binfmt_misc.status = enabled

Неактивен

 

#6 05.06.2008 15:56:11

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: значение статусных переменыых

В sysctl все ок, но ошибка 24 такая:

grisha@milli:~ $ perror 24
Error code  24:  Too many open files

Посмотрите еще
mysql> show variables like 'open_files_limit';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 1024  |
+------------------+-------+
1 row in set (0.00 sec)

Неактивен

 

#7 05.06.2008 16:06:17

shutdown
Завсегдатай
Зарегистрирован: 29.05.2008
Сообщений: 46

Re: значение статусных переменыых

да, у меня так же...
переменные сервера, отвечающие за временные таблицы точно не могут такое вызвать?
А, совсем забыл smile Сервер работает на пределе оперативы... в своп вроде не залазит, но свободно бывает 10-50Мб

Неактивен

 

#8 05.06.2008 16:36:51

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: значение статусных переменыых

Увеличьте open_file_limit до 10000

Неактивен

 

#9 05.06.2008 17:12:14

shutdown
Завсегдатай
Зарегистрирован: 29.05.2008
Сообщений: 46

Re: значение статусных переменыых

подскажите как правильно прописать в конфиге. что-то не получается - после перезапуска сервера show global variables выдает старые значения перменных...

Неактивен

 

#10 05.06.2008 17:32:16

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: значение статусных переменыых

в my.cnf в секции [mysqld] добавить
open_file_limit=10000

Неактивен

 

#11 11.06.2008 12:37:10

shutdown
Завсегдатай
Зарегистрирован: 29.05.2008
Сообщений: 46

Re: значение статусных переменыых

все нормально, сервер стал работать стабильно после поднятия лимита на файлы.
Но меня по-прежнему волнует вопрос больших значений opened_tables.

в статусе:
| Open_files                        | 812       |
| Open_streams                      | 0         |
| Open_table_definitions            | 24        |
| Open_tables                       | 794       |
| Opened_files                      | 9374776   |
| Opened_table_definitions          | 2587676   |
| Opened_tables                     | 2588670   |

может это прояснит дело? У меня создается на каждый запрос временная таблица с engine=memory.
opened_tables и Opened_table_definitions увеличивается на одно и то же число, примерно на 20 в секунду (что соответствует нагрузке по клиентским запросам).
table_open_cache=2000 (но он похоже не используется настолько, судя по Open_tables)

Неактивен

 

#12 11.06.2008 12:50:04

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: значение статусных переменыых

Временные таблицы могут также создаваться, если сложный запрос с подзапросом, группировкой или сортировкой.

mysql> show global status like '%tmp%'\G
*************************** 1. row ***************************
Variable_name: Created_tmp_disk_tables
        Value: 3239579
*************************** 2. row ***************************
Variable_name: Created_tmp_files
        Value: 5
*************************** 3. row ***************************
Variable_name: Created_tmp_tables
        Value: 5062326
3 rows in set (0.00 sec)


Таблица создается MyISAM если превышает минимальную из переменных (tmp_table_size, max_heap_table_size). Посмотрите на запросы с помощью EXPLAIN.

Неактивен

 

#13 11.06.2008 13:12:09

shutdown
Завсегдатай
Зарегистрирован: 29.05.2008
Сообщений: 46

Re: значение статусных переменыых

понятно. вполне возможно, что (tmp_table_size, max_heap_table_size) превышается и создается MyISAM (пока памяти маловато на сервере, я не стал увеличивать эти значения)

у меня вот что:
show global status like '%tmp%'\G
*************************** 1. row ***************************
Variable_name: Created_tmp_disk_tables
        Value: 1337113
*************************** 2. row ***************************
Variable_name: Created_tmp_files
        Value: 248
*************************** 3. row ***************************
Variable_name: Created_tmp_tables
        Value: 1337907
3 rows in set (0.15 sec)

и  счетчики растут почти синхронно (кроме файлового), примерно по десятке в секунду

Отредактированно shutdown (11.06.2008 13:16:54)

Неактивен

 

#14 15.06.2008 01:24:41

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: значение статусных переменыых

Когда сделаете апгрейд памяти сервера, сможете эффективно использовать новую оперативку под временные таблицы. Может быть можно упростить запросы так, чтобы они не требовали временных таблиц.

Неактивен

 

Board footer

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