2010-08-03 13 views
6

Domanda 1: I 10 codici che richiede tempo massimoqual è la query equivalente in mysql?

select top 10 
    source_code, 
    stats.total_elapsed_time/1000000 as seconds, 
    last_execution_time from sys.dm_exec_query_stats as stats 
cross apply(SELECT 
       text as source_code 
      FROM sys.dm_exec_sql_text(sql_handle)) AS query_text 
order by total_elapsed_time desc 

Query2: I 10 codici che richiede al massimo physical_reads

select top 10 
    source_code, 
    stats.total_elapsed_time/1000000 as seconds, 
    last_execution_time from sys.dm_exec_query_stats as stats 
cross apply(SELECT 
       text as source_code 
      FROM sys.dm_exec_sql_text(sql_handle)) AS query_text 
order by total_physical_reads desc 

tratto da questo article

+0

Grazie John per l'editing, questo dovrebbe rendere la domanda più chiara: come ottenere: i 10 codici principali che impiegano il tempo massimo e i 10 codici che richiedono il massimo physical_reads in MYSQL. – Bart

risposta

5

In MySQL è necessario acquisire queste informazioni da un file di log, e non tramite una query. Qualcuno probabilmente ti dirà che una query è possibile, ma non sono equi nei tuoi confronti. Vedi:

http://dev.mysql.com/doc/refman/5.1/en/log-tables.html "Attualmente, l'accesso alle tabelle comporta un sovraccarico del server significativamente maggiore rispetto al collegamento ai file."

.. abbastanza significativo che se si sta facendo questa domanda, non si vuole usarlo.

Così ora la tua domanda diventa "come fai questo con un file di registro?". Il numero di letture fisiche per una query non è registrato nelle versioni stock-MySQL. È comunque disponibile in Percona Server. Il miglioramento è impressionante (anche se io sono di parte, io lavoro per Percona):

http://www.percona.com/docs/wiki/patches:slow_extended

La domanda successiva diventa come si fa aggregare il registro in modo da poter trovare questi dettagli. Per questo, suggerisco mk-query-digest. http://www.maatkit.org/doc/mk-query-digest.html.

1

SELEZIONATE TOP 10 ... è SELECT ... LIMIT 10 in MySQL. Se stai chiedendo informazioni su CROSS APPLY che non è troppo diverso da INNER JOIN, vedi When should I use Cross Apply over Inner Join?

+0

in realtà Sam sta chiedendo come trovare le query SQL che hanno richiesto il tempo più lungo da eseguire. –

0
select 
source_code, 
stats.total_elapsed_time/1000000 as seconds, 
last_execution_time from sys.dm_exec_query_stats as stats 
inner join(SELECT 
      text as source_code 
     FROM sys.dm_exec_sql_text(sql_handle)) AS query_text 
order by total_elapsed_time desc 
limit 10 

 

select 
source_code, 
stats.total_elapsed_time/1000000 as seconds, 
last_execution_time from sys.dm_exec_query_stats as stats 
inner join(SELECT 
      text as source_code 
     FROM sys.dm_exec_sql_text(sql_handle)) AS query_text 
order by total_physical_reads desc 
limit 10 
+0

Per favore correggimi se ho torto, ma non penso che quegli oggetti di gestione dinamica (sys.dm_exec_query_stats, sys.dm_exec_sql_text) esistano in MySQL. –

+0

oic, mi dispiace. Non ho mai notato quella parte. Mancato e trascurato come un normale tavolo –

Problemi correlati