MySQL事务、锁机制、查询缓存

MySQL事务

何为事务?

  事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。

    一个事务可以是一条SQL语句,一组SQL语句或整个程序。

事务的特性:  

  事务是恢复和并发控制的基本单位。
  事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
A:automicity
/*原子性:整个事务中的所有操作要么全部成功执行,要么全部失败回滚*/

C:consistency
/*一致性:事务必须是使数据库从一个一致性状态变到另一个一致性状态*/

I:isolation
/*隔离性:一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰*/

D:durability
/*持久性:事务一旦提交,其所做的修改会永久存入数据库中*/

事务的启动和结束

  在MySQL中,事务开始使用COMMITROLLBACK语句开始工作和结束。开始和结束语句的SQL命令之间形成了大量的事务。

  这两个关键字“提交”和“回滚”主要用于MySQL的事务。

  当一个成功的事务完成后,发出COMMIT命令应使所有参与表的更改才会生效。

  如果发生故障时,应发出一个ROLLBACK命令返回的事务中引用的每一个表到以前的状态。

  建议:在MySQL中有个服务器变量autocommit决定着事务的起止行为,系统默认是autocommit=ON;在实际生产环境中,应将此变量的状态设置为关闭,即需要时自己显式请求和提交事务最为合适。

事务支持SAVEPOINT

SAVEPOINT identifier  //创建保存点
ROLLBACK TO [SAVEPOINT] identifier  //回滚至某保存点
RELEASE SAVEPOINT identifier  //释放保存点

事务的隔离级别

/*
READ-UNCOMMITTED (读未提交) -->导致脏读;
READ-COMMITTED (读提交) --> 不可重复读;
REPEATABLE-READ (可重复读) -->导致幻读;
SERIALIZABLE(可串行化)
*/

  查看当前事务隔离级别的服务器变量:tx_isolation,默认是REPEATABLE-READ

事务日志的相关参数

innodb_log_file_size      ####
innodb_log_files_in_group   #
innodb_log_group_home_dir   /

锁机制

  主要是为了实现并发控制

  锁粒度:

    行级锁和表级锁

  其类型有:

    读锁:共享锁,可被其他用户进行读操作

    写锁:独占锁

  根据是否为用户手动请求,又分为:

    显式锁:用户手动请求的锁

    隐式锁:存储引擎自行根据需求施加的锁

   显式锁使用方法:

/*施加锁*/
LOCK TABLES tbl_name [[AS] alias] lock_type  [, tbl_name [[AS] alias] lock_type] ...
    
    lock_type:
         READ [LOCAL] | [LOW_PRIORITY] WRITE


/*解除锁*/
UNLOCK TABLES

MySQL的查询缓存  

  1.判断缓存是否命中根据:查询语句的哈希值判断;

    哈希值考虑的因素有:

      查询本身、要查询的数据库、客户端使用协议版本,。。。

  2.哪些查询可能不会被缓存?

    查询中包含UDF、存储函数、用户自定义变量、临时表、mysql库中的系统表、或者包含列级权限的表、有着不确定值的函数(Now());

  3.查询缓存相关的服务器变量:

query_cache_min_res_unit  //查询缓存中内存块的最小分配单位;

    /*较小的值会减少浪费,但会导致更频繁的内存分配操作;
        较大的值会造成浪费,也会导致碎片过多;
        */

query_cache_limit  //能缓存的最大查询结果;对于有着较大结果的查询,建议在SELECT中使用SQL_NO_CACHE
query_cache_size  //查询缓存总共可用的内存空间;单位是字节,必须是1024的整数倍;
query_cache_type  //ON,OFF,DEMAND(除非SELECT语句中有SQL_CACHE,否则一律不缓存)
query_cache_wlock_invalidate  //如果某表被其他的连接锁定,是否仍然可以从查询缓存中返回结果;默认为OFF,仍然可以返回结果;但有可能会改变服务器行为,ON则为禁止返回结果。

  4.查询缓存状态相关的变量:

  Qcache_inserts:可缓存查询语句的结果放入缓存中的次数

  Qcache_not_cached:可缓存但未缓存的次数

  缓存命中率评估:
    Qcache_hits/(Qcache_hits+Com_select)

转载于:https://www.cnblogs.com/trymybesttoimp/p/6266006.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值