2016-07-27 63 views
0

此值是我寫的查詢:比較最近InnoDB_Rows_Inserted變量與舊值

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) 

現在,我要爲INNODB_ROWS_INSERTED最近更新的價值和其最後的值之間的差異。

例如 - 在上面的輸出中,INNODb_ROWS_INSERTED的值爲2.如果我再插入一個並重新運行此查詢,則更新的值將爲3.現在我想顯示差異,即1在新的表或文件。

感謝

+0

檢索值,保存它,做你的東西,再次檢索值,比較它。但請注意,這些值是系統寬度。如果任何其他查詢並行執行,則它們也會影響值。 –

回答

0

當心Observer effect的。

方案A:將原始值放入臨時表中,但要確保它不是InnoDB表。經過測試,JOINinformation_schema查詢它以獲取差異。

B計劃:前後使用SHOW GLOBAL STATUS LIKE 'Innodb%';解析輸出(例如,PHP);採取差異。看起來SHOW不太可能受到觀察者效應的影響。但編碼更笨拙。

C計劃(不會爲工作的STATUS值):FLUSH STATUS零出一些STATUS值。在測試之前這樣做,然後使用SHOW SESSION STATUS LIKE '...'。 (請注意,使用SESSION。)這適用於LIKE 'Handler%',我發現它對挖掘查詢的工作方式以及它們的速度有多快有用。