1.隐式提交SQL语句
以下这些SQL语句会产生一个隐式的提交操作,即执行完这些语句后,会有一个隐式的 COMMIT操作
- DDL语句: ALTER DATABASEUPGRADE DATA DIRECTORY NAME,ALTER EVENT, ALTER PROCEDURE, ALTER TABLE, ALTER VIEW,CREATE DATABASE, CREATE EVENT, CREATE INDEX, CREATE PROCEDURE, CREATE TABLE, CREATE TRIGGER, CREATE VIEW,DROP DATABASE, DROP EVENT, DROP INDEX, DROP PROCEDURE,DROP TABLE, DROP TRIGGER, DROP VIEW, RENAME TABLE,TRUNCATE TABLE。
- 用来隐式地修改 MySQL架构的操作: CREATE USER、 DROP USER、 GRANT 、RENAME USER、 REVOKE、 SET PASSWORD。
- 管理语句: ANALYZE TABLE、 CACHE INDEX、 CHECK TABLE、 LOAD INDEX INTO CACHE、 OPTIMIZE TABLE、 REPAIR TABLE。
Microsoft SQL Server的数据库管理员或开发人员往往忽视对于DDL语句的隐式提交操作,因为在 Microsoft SQL Server数据库中,即使是DDL也是可以回滚的。这和 InnoDB存储引擎、 Oracle这些数据库完全不同另外需要注意的是, TRUNCATE TABLE语句是DDL,因此虽然和对整张表执行。
另外需要注意的是, TRUNCATE TABLE语句是DDL,因此虽然和对整张表执行DELETE的结果是一样的,但它是不能被回滚的(这又是和 Microsoft SQL Server数据不同的地方)。
2.事务操作的统计
由于 InnoDB存储引擎是支持事务的,因此 InnoDB存储引擎的应用需要在考虑每秒请求数(Question Per Second,QPS)的同时,应该关注每秒事务处理的能力(Transaction Per Second,TPS)。
计算TPS的方法是(com_commit+com_rollback)/time。但是利用这种方法进行计算的前提是:所有的事务必须都是显式提交的,如果存在隐式地提交和回滚(默认auto_commit=1),不会计算到 com_commit和 com_rollback变量中。如:
mysql> show global status like 'com_commit'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Com_commit | 2 | +---------------+-------+ 1 row in set (0.56 sec)复制代码
MySQL数据库中另外还有两个参数handler_commit和 handler_rollback用于事务的统计操作。但是我注意到这两个参数在MySQL5.1中可以很好地用来统计InnoDB存储引擎显式和隐式的事务提交操作,但是在 InnoDB Plugin中这两个参数的表现有些“怪异”,并不能很好地统计事务的次数。所以,如果用户的程序都是显式控制事务的提交和回滚,那么可以通过com_commit和com_rollback进行统计。如果不是,那么情况就显得有些复杂。