Come applicare un limite o un timeout alle query
Questo articolo illustra i diversi metodi che possono essere usati per applicare un limite o un timeout alle query in MariaDB.
Contents
LIMIT
SELECT ... LIMIT num_righe or SELECT ... LIMIT scarto, num_righe or SELECT ... LIMIT num_righe OFFSET scarto
La clausola LIMIT riduce il numero di righe restituite.
LIMIT ROWS EXAMINED
SELECT ... LIMIT ROWS EXAMINED num_righe;
Ferma la query dopo che sono state esaminate 'num_righe'.
Questa funzionalità è stata introdotta in MariaDB 10.0.0
SQL_SAFE_UPDATES
Se la variabile SQL_SAFE_UPDATES
è impostata, non sarà possibile eseguire un'istruzione UPDATE
o DELETE
a meno che non si specifichi una clausola WHERE
con una condizione su una chiave, oppure una clausola LIMIT
(o entrambe).
SET @@SQL_SAFE_UPDATES=1 UPDATE nome_tab SET colonna_non_chiave=val; -> ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
SQL_SELECT_LIMIT
SQL_SELECT_LIMIT
applica automaticamente LIMIT num_righe
a tutte le query SELECT.
SET @@SQL_SELECT_LIMIT=1000 SELECT * from grande_tabella;
...si comporta come:
SELECT * from big_table LIMIT 1000;
SQL_MAX_JOIN_SIZE
Se SQL_MAX_JOIN_SIZE
è impostata, limiterà tutte le istruzioni SELECT che probabilmente dovranno esaminare più di SQL_MAX_JOIN_SIZE
righe.
SET @@SQL_MAX_JOIN_SIZE=1000; SELECT count(null_column) from grande_tabella; ->ERROR 1104 (42000): The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET MAX_JOIN_SIZE=# if the SELECT is okay
La variabile MAX_QUERY_TIME
E' possibile limitare il tempo di esecuzione di tutte le query impostando la variabile MAX_QUERY_TIME
. Essa rappresenta la durata massima delle query espressa in un numero di secondi (con precisione al millisecondo). Se la query raggiunge il timeout specificato, verrà terminata come se fosse lanciato un comando KILL SOFT.
SET @@SESSION.MAX_QUERY_TIME=0.5; # Abort if query takes more than 1/2 second SELECT SLEEP(100);
max_query_time
può anche essere specificata come argomento di mysqld
all'avvio. Così si imposta la variabile globale, utilizzata per tutte le connessioni.
Per sapere quante volte il timeout è stato raggiunto, è possibile esaminare la variabile di stato max_query_timeouts
:
show global status like 'max_query_timeouts';
Questa funzionalità è programmata per MariaDB 5.5.29