`
septem
  • 浏览: 54449 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SQL语言艺术(九)多条战线:处理并发

    博客分类:
  • sql
阅读更多
这章讨论如何应对大量并发用户的情况

一个测试时很高效的查询可能在大并发情况下执行地很慢,而且当大量语句并发执行,如果SQL语句提交的速度比服务速度要快时,系统性能就会出现严重问题,所有查询都会受到影响,原先较快的查询也会变慢

负载增加未必是造成性能问题的原因,它只不过使性能问题暴露出来了而已。此时,建议改善程序,而不是升级硬件

修改操作本质上比查询代价更高,不仅牵涉取得数据,还涉及写回数据,往往比查询要花更长时间。另外加锁机制和资源争用会引起上述情况恶化

加锁

解决并发修改的冲突涉及到锁的使用,锁会影响以下内容:

整个数据库
存储被修改的表的那部分物理单元
要修改的表
包含目标数据的块或页
包含受影响数据的记录
记录中的字段

加锁的数据量小(细粒度锁),则多个并发进程就可能同时修改同一表中的数据,而不会造成阻塞,从而提高硬件资源的利用率

如果由于加锁的影响,DBMS变得非常缓慢,那么对付突然增加的负载量唯一办法就是购买更好的硬件了。更好的硬件能否提升性能也是有条件的,如果是锁造成的性能瓶颈,更多的处理器也于事无补,因为关键资源是数据存取。当然,较快的处理器可以加速执行,降低实际加锁时间,因此单位时间的吞吐量将会增加

在处理加锁的时候要注意不要随便使用表级锁,尽量缩短加锁时间。大多数的update和delete语句都包含where子句,通过改写where子句能加快select的执行,也能加快update和delete的执行。如果delete语句没有where子句,使用truncate清空表更高效。另外索引也需要维护,更新加了索引的字段代价很高,所以我们必须在读取速度和更新速度之间进行权衡

事务

在程序中还应该考虑事务。大多数事务要求保留数据库特定部分的锁,所以不需要在事务中完成的工作,尤其是耗时的工作,应该排除在事务之外。在事务内,应该注意:
尽可能避免SQL语句上的循环处理
尽量减少程序和数据库的交互次数
充分利用DBMS提供的机制(例如存储过程),使跨机器交互的次数降至最少
把所有不重要,不必须的SQL放到事务之外

加锁与提交

想要使加锁时间最短,就必须时行频繁的提交。提交是代价极高的处理,因为它意味着对日志文件的写操作,涉及物理I/O操作。延迟提交会延长加锁时间,且系统要为undo操作记录更多改变前的数据映像,如果操作失败,事务回滚也要花更长的时间。并发用户数越多,提交的间隔就应该越短

资源竞争

与加锁不同,数据库竞争可以改善。DBA,架构师,开发者都可以从各自的角度改善竞争
2
0
分享到:
评论

相关推荐

    SQL语言艺术pdf

    第9章,多条战线:处理并发 讲解如何处理并发 第10章,集中兵力:应付大数据量 讲解如何应付大数据量 第11章,精于计谋:挽救响应时间 分享一些技巧,以挽救设计糟糕的数据库的性能 第12章,明察秋毫:监控...

    SQL语言艺术(pdf格式)

    第9章,多条战线:处理并发 讲解如何处理并发 第10章,集中兵力:应付大数据量 讲解如何应付大数据量 第11章,精于计谋:挽救响应时间 分享一些技巧,以挽救设计糟糕的数据库的性能 第12章,明察秋毫:监控性能 收尾...

    MICROSOFT SQL SERVER 2008技术内幕:T-SQL语言基础.pdf

    T-SQL(Transact-SQL)是SQL Server专用的数据库查询语言,它是标准SQL语言的扩展,通过增加流程控制语句、变量、函数等,来支持复杂的数据处理任务。 在本节中,我们重点介绍T-SQL的基础知识,内容将涵盖以下几个...

    SQL语言艺术

    9 多条战线:处理并发 数据库引擎作为服务提供者 并发修改数据 10 集中兵力:应付大数据量 增长的数据量 数据仓库 11 精于计谋:挽救响应时间 数据的行列转换 基于变量列表的查询 基于范围的聚合 一般规则,最后使用...

    SQL Server 2000完结篇系列之三:数据并发-彻底掌握SQL Server 2000事务机制

    本篇将深入探讨SQL Server 2000的事务机制,帮助你全面理解并掌握如何在多用户环境下有效地处理数据并发。 首先,我们来了解事务的基本概念。事务是数据库操作的基本单元,它包含了一组逻辑相关的数据库操作。这些...

    SQL语言艺术+The Art of SQL(双语)

    《SQL语言艺术+The Art of SQL》是一本深入探讨SQL语言和数据库性能优化的经典著作,适合数据库管理员、开发人员和数据分析师阅读。书中的内容既包括理论基础,也包含实践技巧,旨在帮助读者掌握如何有效地设计和...

    SQL语言艺术.rar

    5. **联接操作**:SQL提供了多种类型的联接,如内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全外连接(FULL OUTER JOIN),它们在处理多个表的数据时非常有用。 6. **存储过程与触发器**:存储过程...

    数据库并发控制及SQL

    数据库并发控制及SQL 包含内容包括:数据库并发控制及SQL Server的并发控制机制 事务及并发控制的基本概念 封锁机制 SQL Server的并发控制机制 等等

    针对实际应用的sql 语言艺术

    7. **事务与并发控制**:SQL数据库通常需要处理多个用户同时访问,书中会讲解事务的概念、隔离级别以及并发控制策略,如乐观锁和悲观锁。 8. **存储过程与触发器**:存储过程和触发器是数据库中的程序性元素,能够...

    access 一次执行多条sql语句

    ### Access一次执行多条SQL语句 在Access数据库管理中,有时我们需要在同一事务中执行多条SQL语句来确保数据的一致性和完整性。例如,在更新某个记录后可能还需要执行其他操作,如增加日志记录等。本文将详细介绍...

    sqlserver并发分析及解决办法

    本文将从识别并发问题、分析和找出原因、修改并解决问题这三个方面来探讨SQL Server中的并发处理技巧。 #### 二、解决并发问题的关键步骤 **1. 识别并发问题** 并发问题的识别通常是通过监控系统行为和性能指标来...

    SQL语言艺术(中文版+英文版)

    5. **事务与并发控制**:讨论SQL的事务管理,包括ACID属性(原子性、一致性、隔离性和持久性),以及并发问题如死锁(Deadlock)和活锁(Livelock),并介绍不同的并发控制机制如锁定和多版本并发控制(MVCC)。...

    SQL并发测试

    SQL并发测试是数据库管理系统中一个重要的主题,它涉及到在多用户环境下如何有效地处理多个同时进行的SQL查询。并发控制确保了数据的一致性和完整性,即使在高负载的情况下也能避免数据冲突和错误。以下是对这个主题...

Global site tag (gtag.js) - Google Analytics