2016-07-27 316 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%',我发现它对挖掘查询的工作方式以及它们的速度有多快有用。