As variáveis do servidor table_cache,
        max_connections e
        max_tmp_tables afetam o número máximo de
        arquivos que o servidor mantêm abertos. Se você aumentar um ou
        ambos destes valores, você pode ir contra um limite imposto
        pelo seu sistema operacional no número de arquivos abertos por
        processo. Você pode aumentar o limite de arquivos abertos em
        muitos sistemas operacionais, embora o método varia muito de um
        sistema para outro. Consulte a documentação de seu Sistema
        Operacional para saber como fazê-lo, porque o método para
        alterar o limite varia muito de um sistema para outro.
      
        table_cache é relacionado a
        max_connections. Por exemplo, para 200
        conexões concorrentes em execução, você deve ter um tamanho
        de cache de tabela de pelo menos 200 * n,
        onde n é o número máximo de tabelas em um
        join. Você também precisa reservar alguns descritores de
        arquivos para tabelas e arquivos temporários.
      
        Esteja certo de que o seu sistema operacional pode tratar o
        número de descritores de arquivos abertos definido pelo valor
        de table_cache. Se
        table_cache for muito alto, o MySQL pode
        esgotar os descritores de arquivo e recusar conexões, falhar na
        execução de consultas e ser muito instavel. Você também têm
        que levar em conta que o mecanismo de armazenamento
        MyISAM precisa de dois descritores de
        arquivos para cada tabela aberta. Você pode aumentar o número
        de descritores de arquivo disponíveis para o MySQL com a
        opção de inicialização
        --open-files-limit=#. See
        Secção A.2.17, “Arquivo Não Encontrado”.
      
        A cache de tabelas abertas será mantido em um nível de
        table_cache entradas. O valor padrão é 64;
        isto pode ser alterado com a opção -O
        table_cache=# do mysqld. Note que o
        MySQL pode temporariamente abrir mais tabelas para poder se
        executar consultas.
      
Um tabela não usada é fechada e removida da cache de tabelas sob as seguintes circuntâncias:
Quando a cache está cheia e um thread tenta abrir uma tabela que não está na cache.
            Quando a cache contém mais que
            table_cache entradas e uma thread não
            está mais usando uma tabela.
          
            Quando alguém executa mysqladmin refresh
            ou mysqladmin flush-tables.
          
            Quando alguém executa uma instrução FLUSH
            TABLES.
          
Quando o cache de tabela encher, o servidor usa o seguinte procedimento para encontrar uma entrada de cache para usar:
Tabelas que não estiverem em uso são liberadas, na ordem LRU (least-recently-used), ou seja, a tabela que foi usada menos rcentemente.
Se o cache estiver cheio e nenhuma tabelas pode ser liberada, mas uma nova tabela precisar ser aberta, o cache é extendido temporariamente quando necessário.
Se o cache estiver no estado temporariamente extendido e uma tabela vai do estado em-uso para o fora-de-uso, a tabela é fechada e liberada do cache.
A table is opened for each concurrent access. This means the table needs to be opened twice if two threads access the same table or if a thread accesses the table twice in the same query (for example, by joining the table to itself).
Uma tabela é aberta para cada acesso simultâneo. Isto significa a tabela precisa ser aberta duas vezes se duas threads acessam a mesma tabela ou se uma thread acessa a tabela duas vezes na mesma consulta (por exemplo, fazendo um join da tabela com ela mesma). A primeira abertura de qualquer tabela exige dois descritores de arquivos; cada uso adicional da tabela exige somente um descritor. O descritor extra para a primeira abertura é para o arquivo de índice: este descritor é compartilhado entre todas as threads.
        Se você está abrindo uma tabela com a instrução
        HANDLER nome_tabela OPEN, uma tabela dedicada
        é alocada para a thread. Este objeto da tabela não é
        compartilhado por outras threads e não será fechado até que a
        thread chame HANDLER nome_tabela CLOSE ou
        seja finalizada. See Secção 6.4.9, “Sintaxe HANDLER”. Quando isto
        acontece, a tabela é colocada de volta na cache de tabela (se a
        cache não estiver cheia).
      
        Você pode conferir se o seu cache de tabela está muito pequeno
        conferindo a variável opened_tables do
        mysqld. Se este valor for muito grande, mesmo
        se você não fez vários FLUSH TABLES, você
        deve aumentar o tamanho da sua cache de tabelas. See
        Secção 4.6.8.3, “SHOW STATUS”.
      
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

