2016-07-27 31 views
0

Dies ist die Abfrage, die ich geschrieben habe:Vergleich jüngster InnoDB_Rows_Inserted Variablenwert mit dem alten Wert

SELECT variable_name,0 - variable_value 
    FROM information_schema.global_status 
WHERE variable_name IN ('Innodb_rows_inserted','Innodb_rows_updated' 
         ,'Innodb_rows_deleted','Innodb_rows_read' 
         ,'Innodb_data_reads','Innodb_data_read' 
         , 'Innodb_data_writes','Innodb_data_written'); 
+----------------------+--------------------+ 
| variable_name  | 0 - variable_value | 
+----------------------+--------------------+ 
| INNODB_DATA_READ  |   -6672384 | 
| INNODB_DATA_READS |    -422 | 
| INNODB_DATA_WRITES |    -22 | 
| INNODB_DATA_WRITTEN |   -333312 | 
| INNODB_ROWS_DELETED |     0 | 
| INNODB_ROWS_INSERTED |     -2 | 
| INNODB_ROWS_READ  |    -17 | 
| INNODB_ROWS_UPDATED |     0 | 
+----------------------+--------------------+ 
8 rows in set (0.00 sec) 

Jetzt mag ich den Unterschied zwischen dem zuletzt aktualisierten Wert für INNODB_ROWS_INSERTED und seinen letzten Wert.

Zum Beispiel - In der obigen Ausgabe ist der Wert INNODb_ROWS_INSERTED 2. Wenn ich eine weitere einfügen und diese Abfrage erneut ausführen, wird der aktualisierte Wert 3. Jetzt möchte ich die Differenz anzeigen, dh 1 in einem neuen Tabelle oder eine Datei.

Dank

+0

Wert abrufen, speichern, stopfen, Wert wieder abrufen, vergleichen. Beachten Sie jedoch, dass diese Werte SYSTEM-WIDE sind. Wenn andere Abfragen parallel ausgeführt werden, wirken sich diese auch auf die Werte aus. –

Antwort

0

des Observer effect Vorsicht.

Plan A: Legen Sie die ursprünglichen Werte in eine temporäre Tabelle, stellen Sie jedoch sicher, dass es keine InnoDB-Tabelle ist. Nach dem Test, JOIN die information_schema Abfrage, um die Diffs zu erhalten.

Plan B: Verwendung SHOW GLOBAL STATUS LIKE 'Innodb%' vorher und nachher; parse die Ausgabe (in, sagen wir, PHP); Nimm die Diffs. Es scheint, dass SHOW weniger wahrscheinlich dem Beobachter-Effekt unterliegt. Aber die Codierung ist ungeschickter.

Plan C (wird nicht funktionieren für jeneSTATUS Werte): FLUSH STATUS Nullen einigeSTATUS Werte. Tun Sie das vor dem Test und verwenden Sie danach SHOW SESSION STATUS LIKE '...'. (Beachten Sie die Verwendung von SESSION.) Dies funktioniert gut für LIKE 'Handler%', was ich nützlich finde, wenn Sie herausfinden möchten, wie Abfragen funktionieren und wie schnell oder langsam sie sind.