Re Slowlog:muéstranos tu my.cnf. ¿Fueron los cambios en el [mysqld]
¿sección? Pruébelo a través de SELECT SLEEP(12);
, luego busque tanto en el archivo como en la tabla.
Forma alternativa de encontrar la consulta:dado que la consulta tarda varios minutos, haga SHOW FULL PROCESSLIST;
cuando crees que podría estar funcionando.
¿Cuánta memoria RAM tienes? no tener max_allowed_packet=300M
a menos que tenga al menos 30 GB de RAM. De lo contrario, corre el riesgo de cambiar (o incluso fallar). Mantenga esa configuración por debajo del 1 % de RAM.
Para un análisis más detallado de los parámetros ajustables, proporcione (1) tamaño de RAM, (2) SHOW VARIABLES;
y (3) SHOW GLOBAL STATUS;
.
Re deleted_at
:Ese enlace que diste comienza con "La columna delete_at no es un buen candidato para el índice". Lo malinterpretaste. Se trata de un INDEX(deleted_at)
de una sola columna . Estoy sugiriendo un índice compuesto como INDEX(contact_id, job_class_name, execute_at, deleted_at)
.
¿158 segundos para una consulta simple en una mesa pequeña? Podría ser que haya muchos otros cosas que pasan Obtén la PROCESSLIST
.
Re Índices separados versus compuestos:Piense en dos índices:INDEX(last_name)
y INDEX(first_name)
. Pasas por el índice last_name para encontrar "James", entonces, ¿qué puedes hacer? Buscar "Rick" en el otro índice no te ayudará a encontrarme.
Análisis de VARIABLES y ESTADO GLOBAL
Observaciones:
- Versión:5.7.22-log
- 1,00 GB de RAM
- Tiempo activo =16d 10:30:19
- ¿Estás seguro de que se trata de MOSTRAR ESTADO GLOBAL?
- No está ejecutando en Windows.
- Ejecutando la versión de 64 bits
- Parece que está ejecutando completamente (o en su mayoría) InnoDB.
Los asuntos más importantes:
innodb_buffer_pool_size -- Pensé que lo tenías a 213M, no a 10M. 10M es demasiado pequeño. Por otro lado, parece que tienes menos que esa cantidad de datos.
Dado que la memoria RAM es tan pequeña, recomiendo bajar tmp_table_size y max_heap_table_size y max_allowed_packet a 8M. Y bajar table_open_cache, table_definition_cache e innodb_open_files a 500.
¿Qué provoca tantas conexiones simultáneas?
Detalles y otras observaciones:
( innodb_buffer_pool_size / _ram ) = 10M / 1024M = 0.98%
-- % de RAM utilizada para InnoDB buffer_pool
( innodb_buffer_pool_size ) = 10M
-- InnoDB Data + Caché de índice
( innodb_lru_scan_depth ) = 1,024
-- "InnoDB:page_cleaner:1000ms el bucle previsto tomó..." se puede arreglar bajando lru_scan_ depth
( Innodb_buffer_pool_pages_free / Innodb_buffer_pool_pages_total ) = 375 / 638 = 58.8%
-- El porcentaje de buffer_pool actualmente no está en uso -- ¿innodb_buffer_pool_size es más grande de lo necesario?
( Innodb_buffer_pool_bytes_data / innodb_buffer_pool_size ) = 4M / 10M = 40.0%
-- Porcentaje del grupo de búfer ocupado por los datos-- Un pequeño porcentaje puede indica que buffer_pool es innecesariamente grande.
( innodb_log_buffer_size / _ram ) = 16M / 1024M = 1.6%
-- Porcentaje de RAM utilizado para almacenar en búfer las escrituras de registro de InnoDB.-- Demasiado grande resta otros usos a la RAM.
( innodb_log_file_size * innodb_log_files_in_group / innodb_buffer_pool_size ) = 48M * 2 / 10M = 960.0%
-- Relación entre el tamaño del registro y el tamaño del buffer_pool. Se recomienda el 50%, pero vea otros cálculos para saber si es importante.-- El registro no necesita ser más grande que el grupo de búfer.
( innodb_flush_method ) = innodb_flush_method =
-- Cómo InnoDB debería pedirle al sistema operativo que escriba bloques. Sugiera O_DIRECT o O_ALL_DIRECT (Percona) para evitar el doble almacenamiento en búfer. (Al menos para Unix). Consulte a chrischandler para obtener una advertencia sobre O_ALL_DIRECT
( innodb_flush_neighbors ) = 1
-- Una optimización menor al escribir bloques en el disco. -- Use 0 para unidades SSD; 1 para disco duro.
( innodb_io_capacity ) = 200
-- Capacidad de operaciones de E/S por segundo en disco . 100 para unidades lentas; 200 para unidades giratorias; 1000-2000 para SSD; multiplique por el factor RAID.
( innodb_print_all_deadlocks ) = innodb_print_all_deadlocks = OFF
-- Ya sea para registrar todos los Interbloqueos.-- Si está plagado de Interbloqueos, enciéndalo. Precaución:si tiene muchos interbloqueos, esto puede escribir mucho en el disco.
( min( tmp_table_size, max_heap_table_size ) / _ram ) = min( 16M, 16M ) / 1024M = 1.6%
-- Porcentaje de RAM para asignar cuando se necesita una tabla de MEMORIA (por tabla) o una tabla temporal dentro de una SELECCIÓN (por tabla temporal según algunas SELECCIONES). Demasiado alto puede conducir al intercambio.-- Disminuya tmp_table_size y max_heap_table_size a, digamos, 1% de ram.
( net_buffer_length / max_allowed_packet ) = 16,384 / 16M = 0.10%
( local_infile ) = local_infile = ON
-- local_infile =ON es un posible problema de seguridad
( Select_scan / Com_select ) = 111,324 / 264144 = 42.1%
-- % de selecciones que realizan un escaneo completo de la tabla. (Puede dejarse engañar por las rutinas almacenadas).-- Agregar índices/optimizar consultas
( long_query_time ) = 10
-- Límite (segundos) para definir una consulta "lenta".-- Sugerir 2
( Max_used_connections / max_connections ) = 152 / 151 = 100.7%
-- % máximo de conexiones:aumente max_connections y/o disminuya wait_timeout
Tienes la Query Cache a mitad de precio. Debe configurar query_cache_type =OFF y query_cache_size =0 . Existe (según un rumor) un 'error' en el código de control de calidad que deja algo de código activado a menos que desactive ambas configuraciones.
Anormalmente pequeño:
( Innodb_pages_read + Innodb_pages_written ) / Uptime = 0.186
Created_tmp_files = 0.015 /HR
Handler_write = 0.21 /sec
Innodb_buffer_pool_bytes_data = 3 /sec
Innodb_buffer_pool_pages_data = 256
Innodb_buffer_pool_pages_total = 638
Key_reads+Key_writes + Innodb_pages_read+Innodb_pages_written+Innodb_dblwr_writes+Innodb_buffer_pool_pages_flushed = 0.25 /sec
Table_locks_immediate = 2.8 /HR
Table_open_cache_hits = 0.44 /sec
innodb_buffer_pool_chunk_size = 5MB
Anormalmente grande:
Com_create_db = 0.41 /HR
Com_drop_db = 0.41 /HR
Connection_errors_peer_address = 2
Performance_schema_file_instances_lost = 9
Ssl_default_timeout = 500
Cadenas anormales:
ft_boolean_syntax = + -><()~*:&
have_ssl = YES
have_symlink = DISABLED
innodb_fast_shutdown = 1
optimizer_trace = enabled=off,one_line=off
optimizer_trace_features = greedy_search=on, range_optimizer=on, dynamic_range=on, repeated_subselect=on
session_track_system_variables = time_zone, autocommit, character_set_client, character_set_results, character_set_connection
slave_rows_search_algorithms = TABLE_SCAN,INDEX_SCAN