提高数据库并发性能概要
来源:互联网 发布:sql server2012图标 编辑:程序博客网 时间:2024/06/15 07:11
该操作会创建B表,并对B表加表锁。 与降低锁的粒度异曲同工。 本质是拆库。与拆表异曲同工。数据库路由(定位),对于程序员来说就是数据源路由(查找、定位),需要定义多个数据源,并采取合适算法进行定位。可参考 http://hi.baidu.com/dapplehou/blog/item/6ba8034f5114e038aec3abdb.html 多库部分. 什么是合适算法?那要根据库的切分方式、性能需要以及业务需要来定夺。 可以降低数据库长事物。只在提交的那一刹那判断自己提交的数据是否已经被别人修改过了,如是,则认为自己要提交的数据是过期数据,取消提交,否则,提交成功。避免长事物带来的等待。通常采用版本号来判断是否过期数据。过程如下: 提交成功。id=10的这条记录version为2. 因为version已经等于2了,所以这条更新语句会影响0行。这样,谁先提交,谁成功。后来者的不会因为先到者读取后迟迟不提交而等待等待。减少了站着茅坑不拉屎的情况。提高了并发性能。 使用局部临时表提高并发性能。局部临时表特点是多用户操作互不干扰。一个局部临时表只对一个session可见、有效。多用户并发实际是各操作各自的临时表,不会产生数据表锁的问题。提高并发效率。 SQL Server创建临时表语句: Oracle: 把主表(频繁使用又数据量大)中的部分数据放入局部临时表,然后在临时表里进行计算、统计等工作,然后同步到主表中去(同步过程可用乐观锁机制),减少了主表在并发时锁等待的开销。 临时表性能提升原理和拆分表原理相同:通过把一个大集合拆成小集合,然后在小集合上进行计算。 有的操作,虽然没有更新过程,但频繁的复杂查询也会使数据库性能降低。这种情况下,可采取把一些查询后的结果且不轻易变的数据保存在缓存中供后续使用。 例如:不同用户登录后的菜单显示可能要根据不同部门、不同权限以及委托、兼职等复杂逻辑来确定菜单的显示项,数据库的查询可能非常消耗性能,这种情况下,可缓存所有菜单形成菜单池,再采用亨元模式,缓存每个用户的可见菜单,这样减少了数据库查询次数,避免了显示菜单时每次都要查询数据库的性能损耗。 亨元模式可参见:http://hi.baidu.com/dapplehou/blog/item/aeca1d958268e1047bf48089.html 与多库(拆库)区别: 集群是每个库上都有一份相同的数据;拆库是每个库只有全集的部分数据。 多数据库冗余可以减少单个数据库的负载,总体上提高了性能。它有3个技术关键点: 在读操作远多于写操作的大型应用中,可采用读写分离策略。用来读的数据库叫从数据库,用来写或者事务性查询的叫主数据库。主数据库的数据变化会通过某些策略(比如数据库复制)同步到从数据库,从而保证主从数据库数据一致性。其本质是空间换时间,即:通过增加数据库冗余,降低数据库对锁的复杂调度。但另一方面,增加了应用架构的复杂度 (这种复杂性可以通过使用第三方中间件来降低)。 SQL语句是数据库资源消耗的主要来源,它往往都是可以进一步优化的,SQL优化在时间成本和风险上代价低。 我们写的SQL语句都会被查询优化器自动优化,它的优化原则是这样的: 由于有了以上优化,所以下面两种SQL的写法效率一样 随着数据库的进化,原来效率低的语句现在不一定低,需要实际测试。Table of Contents
1 细粒度锁表
select * into B from A
2 拆表
2.1 物理拆分方式
2.2 逻辑拆分方式
3 多数据源(多库)
4 乐观锁
update account set money=money+50,version=version+1 where id=10 and version=1
update account set money=money-50,version=version+1 where id=10 and version=1
5 临时表
CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)
CREATE GLOBAL TEMPORARY TABLE MyTempTable
6 缓存
7 数据库集群
8 读写分离策略
9 SQL优化
1. 选择运算优先运行。(即优先通过条件过滤记录集)
2. 投影运算与选择运算同时进行。
3. 将笛卡尔积与随后的选择运算合并为连接运算
4. 投影运算与其他运算同时进行
5. 寻找公共子表达式并将结果加以存储
6. 对文件进行预处理select * from A,B where A.id=B.id and A.name='Jake'
select * from A,B were A.name='Jake' and A.id=B.id10 正确使用索引
- 提高数据库并发性能概要
- 提高数据库并发性能概要
- 提高数据库并发性能概要
- 提高数据库并发性能概要
- 提高TOMCAT并发处理性能
- 提高TOMCAT并发处理性能
- 提高MySQL 数据库性能
- 如何提高数据库性能
- 如何提高数据库性能 .
- hibernate 提高数据库性能
- 提高MySQL数据库性能
- 如何提高数据库性能
- Ending、提高数据库性能
- 如何提高数据库性能
- 提高Apache下Passenger的并发性能
- 设置Weblogic以提高并发处理性能
- 提高tomcat性能(并发量)
- Erlang提高ETS并发读写性能
- .net ----DataTable与购物车
- 06.Javascript设计模式之桥接模式----Bridge
- 07.Javascript设计模式之组合模式----Composite
- smem——内存检测工具
- Linksys PAP2 语音网关安装配置 (voip elastix 网关)
- 提高数据库并发性能概要
- [HengStar-Boost讲堂]多索引容器multi_index_container实战
- 08.Javascript设计模式之门面模式----Facade
- javascript 显示时间
- Windows下txt文件的字符编码
- 使用工具
- 各种引擎规格介绍
- Linux下的多线程编程
- 日月潭孔雀园