这是我写的查询:
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)
计划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%'
,我认为这有助于深入了解查询的工作方式以及查询的速度和速度。