Esta es la solución más válida que encomtrarás brindar, pero mírala pausadamente y analiza si se adapta a tu trabajo.
Solución:
La razón por la que no encontraste una respuesta es porque no hay una respuesta. El valor apropiado para table_cache
no se correlaciona con una cantidad de memoria del sistema.
Tenga en cuenta que table_cache
fue renombrado table_open_cache
en MySQL 5.1.3 y se hace referencia con el nuevo nombre en las versiones más recientes de MySQL.
Como mencioné en mi respuesta a esta pregunta reciente similar, entre las cosas que pueden incrementar opened_tables
algunos de ellos son inofensivos e inevitables (como hacer copias de seguridad con mysqldump
que, en la mayoría de los casos, emite alguna variante de FLUSH TABLES
que incrementa los contadores a medida que cada tabla se vuelve a abrir después del vaciado, ya sea con el fin de hacer una copia de seguridad de la tabla o por otros subprocesos de clientes que acceden a las tablas recientemente vaciadas, que naturalmente deben volver a abrirse).
Lo que no pensé mencionar en esa publicación es, y confío en que encontrará algo de diversión en esto, que el acto de ejecutar mysqltuner contra su servidor puede, en sí mismo, incrementar el opened_tables
contador, invalidando así sus propios resultados.
Un comentarista de mi respuesta hizo referencia a este artículo, donde el autor señala que ajustar table_cache
empeora el rendimiento cuanto más “óptimamente” lo configure.
La conclusión es que este es un buen ejemplo de una variable que es mejor dejarla a menos que tenga una razón específica para modificarla, y la salida de un script de ajuste no cuenta. Los scripts de ajuste a menudo tienen buenas intenciones, pero a veces eso es lo mejor que se puede decir sobre ellos:
El problema con las correlaciones que a veces parecen ser true es que la gente empieza a creer que siempre serán true. Los DBA de Oracle abandonaron el ajuste basado en proporciones hace años y deseamos que los DBA de MySQL sigan su ejemplo.
Deseamos aún más fervientemente que la gente no escriba “guiones de sintonía” que codifiquen estas peligrosas prácticas y las enseñen a miles de personas. Esto lleva a nuestra segunda sugerencia de lo que no se debe hacer: ¡no utilice scripts de ajuste! Hay varios muy populares que puedes encontrar en Internet. Probablemente sea mejor ignorarlos.
También le sugerimos que evite la palabra “ajuste”, que hemos usado generosamente en los últimos párrafos. Preferimos la “configuración” o la “optimización” en su lugar (siempre y cuando eso sea lo que realmente esté haciendo; consulte el Capítulo 3). La palabra “ajuste” evoca imágenes de un novato indisciplinado que ajusta el servidor y ve lo que sucede. Sugerimos en la sección anterior que es mejor dejar esta práctica para aquellos que están investigando los aspectos internos del servidor.
“Afinar” su servidor puede ser una asombrosa pérdida de tiempo.
— Schwartz, barón; Zaitsev, Peter; Tkachenko, Vadim (2012-03-05). MySQL de alto rendimiento: optimización, copias de seguridad y replicación (ubicaciones de Kindle 12173-12182). OReilly Media – A. Edición Kindle.
Como nota al margen, MySQL 5.0 está al final de su vida útil. MySQL 5.0.67 se lanzó hace más de 4 años y desde entonces se corrigió una cantidad significativa de errores en la serie de versiones 5.0. Si tuviera un servidor 5.0.67 y estuviera funcionando, lo último que querría hacer sería cambiar cualquier cosa sobre su configuración.
Estás abriendo menos de 1 mesa por hora. Es decir insignificante.
La métrica que debería haberse examinado es Opened_tables / Uptime
. Eso es “por segundo”.
Sugiero que cualquier cosa por debajo de 2/seg está bien.
Volviendo a la pregunta del título:
Considere aumentar table_open_cache
Si
Opened_tables / Uptime > 2
Opened_table_definitions / Uptime > 1
Table_open_cache_misses / Uptime > 1
Table_open_cache_overflows / Uptime > 1
Open_tables = table_open_cache
Si no puedes subirlo, comprueba open_files_limit
y el límite del sistema operativo.
Si su MySQL es lo suficientemente nuevo, configure table_open_cache_instances
a (quizás) la cantidad de núcleos que tiene.