zoukankan      html  css  js  c++  java
  • 数据库调优(4)

     6.事务处理调优

      数据库的日常运行过程中可能面临多个用户同时对数据库的并发操作带来的数据不一 致的问题,如:丢失更新、脏读和不可重复读等。并发控制的主要方法是封锁,锁就是在一段时间内禁止用户做某些操作以避免产生数据不一致。

      数据库应用程序将其工作分成若干个事务进行处理。当一个事务执行时,它访问数据库 并执行一些本地计算。开发人员可以假设每一个事务都会被隔离地执行—没有任何并发动 作。因为隔离的概念提供了透明性,这种对事务处理方式的保证有时被称为原子性保证。但 是,如果把应用程序中的事务序列作为一个整体来看,则并没有上面所说的那种保证。在一 个应用程序执行的两个事务之间,可能会执行另外一个应用程序的事务,而且第二个应用程 序的执行可能修改了第一个应用程序中的两个事务(或其中的一个)需要访问的数据项。因 此,事务的长度对保证正确性有着重要影响。

      尽管将事务切分成较小粒度可以提高执行效率,但会因此破坏执行的正确性。这种性能 和正确性之间的矛盾充斥并发控制的整个调优过程。考虑事务的性能我们要考虑到:事务使 用的锁的个数(在所有其他条件相同的情况下,使用的锁个数越少,性能越好);锁的类型  (读锁对性能更有利);事务持有锁的时间长短(持有时间越短,性能越好)。

      关于锁的调优 有以下建议:

      (1)使用特殊的系统程序来处理长的读操作。对于一个只读的事务R 来说,它“看到” 的数据库的状态一直是事务R  开始时的状态。只读查询可以不需要封锁开销,在不造成阻 塞和死锁的情况下,只读的查询可以与其他对同一数据进行更新的较小的事务并行地执行。

      (2)消除不必要的封锁。只有一个事务执行时,或所有事务都是只读事务时,用户应 利用配置选项减少锁的个数,从而减小锁管理模块的内存开销和执行封锁操作的处理时间开 销。

      (3)根据事务的内容将事务切分成较小的事务。事务所要求的锁越多,它需要等待其 他事务释放某个锁的可能就越大。事务T 执行的时间越长,被T  阻塞的事务等待的时间可 能就越长。因此,在可能发生阻塞的情况下,利用较短的事务较好。

      (4 )在应用程序允许的情况下,适当降低隔离级别。

      (5)选择适当的封锁粒度。页级封锁阻止并发事务访问或修改该页面上所有记录,表 级封锁阻止并发事务访问或修改表内所有的页面;记录级封锁(行级锁)比页级封锁粒度好, 页级封锁比表级封锁粒度好。长事务(指要访问表内几乎所有页面的事务)应该尽可能使用 表级封锁来防止死锁,而短事务应该使用记录级封锁来提高并发度。

      (6)只在数据库很少被访问时才修改有关数据定义的数据(系统目录或元数据)。每个 能够编译、添加或删除表、添加或删除索引、改变属性定义的事务都必须访问目录数据,因 此,目录很容易成为热点,也因而成为瓶颈。

      (7)减少访问热点(大量事务访问和更新的数据)。只有在更新某热点的事务完成滞后, 其他的事务才能获得这个热点上的锁,因此热点可能成为瓶颈。

      (8)死锁检测周期的调优。

      以上每个建议都可以独立于其他建议来运用,但是在调优时必须检测是否能体现合适 的隔离性保证。

      7.总结

      数据库性能优化的基本原则就是通过尽可能少的磁盘访问获得所需要的数据。本文从计 算机硬件、关系系统与应用程序、数据库索引、SQL  语句、事务处理几个比较共性的方面 分析了数据库性能优化的问题,  提出了若干数据库性能优化的策略。当然实现优化的方法还 有很多,  要根据具体情况而定。对于不同的应用情况,我们应该具体情况具体分析,  各方面优 化措施综合运用,  以使数据库性能得到提高。数据库应用系统的性能是一项全民工程,开发 团队的所有人都有责任为性能做贡献,树立性能意识,使之成为日常工作的习惯而不是单独 成为某一阶段的工作,要未雨绸缪,不要寄希望于某一个环节的工作。

  • 相关阅读:
    TCC
    使用RocketMQ实现分布式事务
    CentOS关机
    使用grub手动引导linux和windows
    CentOS下X Window与命令行界面的切换
    Centos下 为firefox安装flash插件
    tar.xz文件如何解压
    用Linux命令wget进行整站下载
    CentOS关闭火狐浏览器Flash过期提示
    CentOS普通用户添加sudo权限
  • 原文地址:https://www.cnblogs.com/future2012lg/p/2651917.html
Copyright © 2011-2022 走看看