Spec-Zone .ru
спецификации, руководства, описания, API
|
Когда Вы выполняете mysqladmin команду состояния, следует видеть что-то вроде этого:
Uptime: 426 Running threads: 1 Questions: 11082Reloads: 1 Open tables: 12
Open tables
значение 12 может быть несколько озадачивающим, если у Вас есть только
шесть таблиц.
MySQL является многопоточным, таким образом может быть много клиентов, выпускающих запросы для данной таблицы
одновременно. Чтобы минимизировать проблему с многократными клиентскими сеансами, имеющими различные состояния
на той же самой таблице, таблица открывается независимо каждым параллельным сеансом. Это использует
дополнительную память, но обычно увеличивает производительность. С MyISAM
таблицы,
один дополнительный дескриптор файла требуется для файла данных для каждого клиента, у которого есть открытая
таблица. (В отличие от этого, дескриптор индексного файла совместно используется всеми сеансами.)
table_open_cache
и max_connections
системные переменные влияют на максимальное количество файлов,
которые сервер сохраняет открытым. Если Вы увеличиваетесь один или оба из этих значений, можно столкнуться с
пределом, наложенным Вашей операционной системой на число для каждого процесса открытых дескрипторов файлов.
Много операционных систем разрешают Вам увеличивать предел открытых файлов, хотя метод значительно различается
от системы до системы. Консультируйтесь со своей документацией операционной системы, чтобы определить, возможно
ли увеличить предел и как сделать так.
table_open_cache
связывается с max_connections
. Например, для 200 параллельных рабочих соединений, определите
табличный размер кэша, по крайней мере, 200 *
,
где N
N
максимальное количество таблиц на, участвуют в любом из
запросов, которые Вы выполняете. Следует также зарезервировать некоторые дополнительные дескрипторы файлов для
временных таблиц и файлов.
Удостоверьтесь, что Ваша операционная система может обработать число открытых дескрипторов файлов,
подразумеваемых table_open_cache
установка. Если table_open_cache
устанавливается слишком высоко, MySQL может исчерпать дескрипторы файлов и отказаться от соединений, быть не в
состоянии выполнить запросы, и быть очень ненадежным. Также необходимо принять во внимание что MyISAM
механизм хранения нуждается в двух дескрипторах файлов для каждой
уникальной открытой таблицы. Можно увеличить число дескрипторов файлов, доступных MySQL, используя --open-files-limit
опция запуска к mysqld. См. Раздел
C.5.2.18, "'File
'Не Найденные
и Подобные Ошибки".
Кэш открытых таблиц сохраняется на уровне table_open_cache
записи. Значение по умолчанию 400; это может быть изменено с --table_open_cache
опция к mysqld. Отметьте, что MySQL может временно открыть больше
таблиц чем это, чтобы выполнить запросы.
MySQL закрывает неиспользованную таблицу и удаляет ее из табличного кэша при следующих обстоятельствах:
Когда кэш полон, и поток пытается открыть таблицу, которая не находится в кэше.
Когда кэш содержит больше чем table_open_cache
записи и таблица в кэше больше не используются никакими
потоками.
Когда табличная работа сбрасывания происходит. Это происходит когда кто-то проблемы
a FLUSH
TABLES
оператор или выполняет mysqladmin таблицы сброса или команду обновления mysqladmin.
Когда табличный кэш заполняется, сервер использует следующую процедуру, чтобы определить местоположение записи кэша в использование:
Таблицы, которые не используются в настоящее время, выпускаются, начинаясь с последней использованной таблицы.
Если новая таблица должна быть открыта, но кэш полон, и никакие таблицы не могут быть выпущены, кэш временно расширяется по мере необходимости. Когда кэш находится во временно расширенном состоянии, и таблица идет от используемого до неиспользованного состояния, таблица закрывается и выпускается от кэша.
A MyISAM
таблица открывается для каждого параллельного доступа. Это означает
табличные потребности быть открытыми дважды, если два потока получают доступ к той же самой таблице или если
поток получает доступ к таблице дважды в том же самом запросе (например, соединяя таблицу с собой). Каждый
параллельный открытый требует записи в табличном кэше. Первый открытый из любого MyISAM
таблица берет два дескрипторов файлов: один для файла данных и один для
индексного файла. Каждое дополнительное использование таблицы берет только один дескриптор файла для файла
данных. Дескриптор индексного файла совместно используется среди всех потоков.
Если Вы открываете таблицу с HANDLER
оператор, выделенный табличный объект выделяется для потока. Этот табличный объект не совместно
используется другими потоками и не закрывается до вызовов потока tbl_name
OPENHANDLER
или поток завершается. Когда это происходит,
таблица откладывается в табличном кэше (если кэш не полон). См. Раздел 13.2.4,"tbl_name
CLOSEHANDLER
Синтаксис".
Можно определить, является ли Ваш табличный кэш слишком маленьким, проверяя mysqld переменную состояния Opened_tables
, который указывает на число открывающих таблицу операций начиная с
запущенного сервера:
mysql> SHOW GLOBAL STATUS LIKE
'Opened_tables';
+---------------+-------+| Variable_name | Value |+---------------+-------+| Opened_tables | 2741 |+---------------+-------+
Если значение является очень большим или увеличивается быстро, даже когда Вы не выпустили многих FLUSH TABLES
операторы, увеличьте табличный размер кэша. См. Раздел
5.1.4, "Системные Переменные Сервера", и Раздел 5.1.6,
"Переменные Состояния Сервера".