将最近的InnoDB_Rows_Inserted变量值与旧值进行比较

时间:2016-07-27 16:59:24

标签: mysql innodb database-administration

这是我写的查询:

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在新表或文件中。

谢谢

1 个答案:

答案 0 :(得分:0)

小心Observer effect

计划A:将原始值放在临时表中,但要确保它不是InnoDB表。测试结束后,JOIN information_schema查询它以获取差异。

B计划:前后使用SHOW GLOBAL STATUS LIKE 'Innodb%';解析输出(例如,PHP);采取差异。 SHOW似乎不太可能受观察者效应的影响。但编码更笨拙。

计划C(不适用于那些 STATUS值):FLUSH STATUS某些 STATUS值归零。在测试之前执行此操作,然后使用SHOW SESSION STATUS LIKE '...'。 (请注意SESSION的使用。)这适用于LIKE 'Handler%',我认为这有助于深入了解查询的工作方式以及查询的速度和速度。