提高数据库并发性能概要

Table of Contents

  • 1 细粒度锁表
  • 2 拆表
    • 2.1 物理拆分方式
    • 2.2 逻辑拆分方式
  • 3 多数据源(多库)
  • 4 乐观锁
  • 5 临时表
  • 6 缓存
  • 7 数据库集群
  • 8 读写分离策略
  • 9 SQL优化
  • 10 正确使用索引

1 细粒度锁表

  1. 减少大事物操作 (一个包含很多SQL语句、牵涉很多表的大事物操作锁住的资源也会多);
  2. 尽量不使用表级排他锁,而是用行级锁;又因为锁一般是由数据库根据你的 SQL自动分配,所以要注意SQL的写法。比如
    select * into B from A

    该操作会创建B表,并对B表加表锁。

2 拆表

与降低锁的粒度异曲同工。

2.1 物理拆分方式

  1. 水平拆分: 把不同行记录分开放进不同表中。比如男性放入一张表中,女性放入另一张表。
  2. 垂直拆分: 把不同列分别放入不同表中。比如主用户信息放入一张表,附加信息放入另一张表。
  3. 混合拆分(水平拆分+垂直拆分)

2.2 逻辑拆分方式

  1. 按范围拆分,比如所有zipcode列的值 between 70000 and 79999的记录拆成一个表.
  2. 分组拆分,比如country列为冰岛、挪威、瑞典、丹麦这些北欧国家的记录拆成一个表
  3. 哈希拆分:参见数据库的哈希设计:http://hi.baidu.com/dapplehou/blog/item/471a277ff8eafc0529388ac4.html
  4. 混合拆分,以上几种拆分方式的综合。
  5. 可建立查找表以方便对拆分的子表进行登记、查询、定位。

3 多数据源(多库)

本质是拆库。与拆表异曲同工。数据库路由(定位),对于程序员来说就是数据源路由(查找、定位),需要定义多个数据源,并采取合适算法进行定位。可参考 http://hi.baidu.com/dapplehou/blog/item/6ba8034f5114e038aec3abdb.html 多库部分.

什么是合适算法?那要根据库的切分方式、性能需要以及业务需要来定夺。

4 乐观锁

可以降低数据库长事物。只在提交的那一刹那判断自己提交的数据是否已经被别人修改过了,如是,则认为自己要提交的数据是过期数据,取消提交,否则,提交成功。避免长事物带来的等待。通常采用版本号来判断是否过期数据。过程如下:

  1. A、B两人同时读取同一条银行账户记录,记录版本号为1。
  2. A修改此记录:增加100元,版本号加1。
  3. B修改此记录:减少50元,版本号加1。
  4. A提交。假设提交SQL如下:
    update account set money=money+50,version=version+1 where id=10 and version=1

    提交成功。id=10的这条记录version为2.

  5. B提交。提交SQL如下:
    update account set money=money-50,version=version+1 where id=10 and version=1

    因为version已经等于2了,所以这条更新语句会影响0行。这样,谁先提交,谁成功。后来者的不会因为先到者读取后迟迟不提交而等待等待。减少了站着茅坑不拉屎的情况。提高了并发性能。

5 临时表

使用局部临时表提高并发性能。局部临时表特点是多用户操作互不干扰。一个局部临时表只对一个session可见、有效。多用户并发实际是各操作各自的临时表,不会产生数据表锁的问题。提高并发效率。

SQL Server创建临时表语句:

CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)

Oracle:

CREATE GLOBAL TEMPORARY TABLE MyTempTable

把主表(频繁使用又数据量大)中的部分数据放入局部临时表,然后在临时表里进行计算、统计等工作,然后同步到主表中去(同步过程可用乐观锁机制),减少了主表在并发时锁等待的开销。

临时表性能提升原理和拆分表原理相同:通过把一个大集合拆成小集合,然后在小集合上进行计算。

6 缓存

  1. 原理同临时表。先在内存里折腾(计算、update等),然后把折腾的结果一次性的同步给db(同步过程可使用乐观锁机制).
  2. 算法优化。

    有的操作,虽然没有更新过程,但频繁的复杂查询也会使数据库性能降低。这种情况下,可采取把一些查询后的结果且不轻易变的数据保存在缓存中供后续使用。

    例如:不同用户登录后的菜单显示可能要根据不同部门、不同权限以及委托、兼职等复杂逻辑来确定菜单的显示项,数据库的查询可能非常消耗性能,这种情况下,可缓存所有菜单形成菜单池,再采用亨元模式,缓存每个用户的可见菜单,这样减少了数据库查询次数,避免了显示菜单时每次都要查询数据库的性能损耗。

    亨元模式可参见:http://hi.baidu.com/dapplehou/blog/item/aeca1d958268e1047bf48089.html

7 数据库集群

与多库(拆库)区别: 集群是每个库上都有一份相同的数据;拆库是每个库只有全集的部分数据。

多数据库冗余可以减少单个数据库的负载,总体上提高了性能。它有3个技术关键点:

  1. 数据库查询路由
  2. 数据库同步
  3. 负载均衡算法

8 读写分离策略

在读操作远多于写操作的大型应用中,可采用读写分离策略。用来读的数据库叫从数据库,用来写或者事务性查询的叫主数据库。主数据库的数据变化会通过某些策略(比如数据库复制)同步到从数据库,从而保证主从数据库数据一致性。其本质是空间换时间,即:通过增加数据库冗余,降低数据库对锁的复杂调度。但另一方面,增加了应用架构的复杂度 (这种复杂性可以通过使用第三方中间件来降低)。

9 SQL优化

SQL语句是数据库资源消耗的主要来源,它往往都是可以进一步优化的,SQL优化在时间成本和风险上代价低。

我们写的SQL语句都会被查询优化器自动优化,它的优化原则是这样的:

1. 选择运算优先运行。(即优先通过条件过滤记录集)
2. 投影运算与选择运算同时进行。
3. 将笛卡尔积与随后的选择运算合并为连接运算
4. 投影运算与其他运算同时进行
5. 寻找公共子表达式并将结果加以存储
6. 对文件进行预处理

由于有了以上优化,所以下面两种SQL的写法效率一样

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.id

随着数据库的进化,原来效率低的语句现在不一定低,需要实际测试。

10 正确使用索引

  1. 索引列
    1. 经常查询的列
    2. 经常排序的列
    3. 经常连接的列
  2. 非索引列
    1. 不经常使用的列
    2. 重复记录太多的列(比如性别)
    3. Image text类型的列
已标记关键词 清除标记
相关推荐
(一)客户端组件和服务器端组件 2 (二)Oracle Database 的体系架构 2 1. 什么是数据库?什么是实例? 3 2. 存储结构 3 数据文件(data file) 4 联机日志文件(online redo log file) 4 控制文件(control file) 5 归档模式:冷备份,离线备份,热备份,联机备份 6 Spfile:二进制,9i 之后 Pfile:文本,9i 之前 6 可以将 spfile 转换为 pfile 6 注意:scope 的取值有三个:memory、spfile、both 7 一个表空间(tablespace)由一组段组成 8 Tablespaces(表空间) 8 system sysaux temp undo 8 Segments (段) 8 extents (区) 8 Data Block (数据块) 8 3. 进程结构 9 日志写进程(LGWR) 检查点进程(CKPT) 9 归档进程(ARCn) 恢复器进程(RECO) 9 2日志写进程(LGWR) 10 3检查点进程(CKPT) 10 6归档进程(ARCn) 10 7恢复器进程(RECO) 11 4. 内存结构 11 1共享池:shared pool 12 3重做日志缓冲区:log buffer 12 (三)自动内存管理和自动共享内存管理 13 (四)管理方案对象 13 (五)数据字典 15 (一)安装 Oracle Linux 7.3 64 位操作系统 17 (二)安装 Oracle Database 12cR2 19 (三)使用 DBCA 创建 Oracle 数据库 21 (四)验证 Oracle Database 12cR2 环境 25 (五)使用 oracle-database-server-12cR2-preinstall 包 25 三、管理数据库实例 27 (一)管理工具 27 (二)初始化参数 27 (三)数据库启动的过程 29 (四)数据库的关闭 29 四、配置 Oracle 的网络环境 31 (一)连接建立的过程 31 (二)使用 lsnrctl 命令 31 (三)如何配置监听器 33 (四)注册数据库的服务 34 (五)建立连接的方法 36 (六)共享服务器模式 38 (七)分布式数据库基础 40 五、管理用户和权限 42 (一)用户 42 (二)权限 46 (三)角色 51 (四)概要文件:Profile 54 六、管理数据库存储结构 57 (一)存储结构 57 (二)数据块的结构 57 (三)表空间和数据文件 57 (四)什么是自动存储管理 58 七、数据的并发处理 60 (一)锁定的机制 60 (三)锁的队列 60 (四)死锁 62 (五)手动加锁 64 (方式一)lock 语句 64 八、管理还原数据 65 (一)什么是还原数据? 65 (二)还原数据的作用 66 (三)还原数据的工作原理 66 (四)还原数据与重做数据 67 (五)管理还原数据 67 (六)还原保留期和确保还原保留期 67 九、数据库审计 68 (一)什么是数据库审计 68 (二)审计的参数设置 69 (三)强制审计 69 (四)标准审计 69 (五)基于值的审计 71 (六)细粒度审计(FGA) 71 (七)DBA 审计 73 (八)12c 审计的新特性 73 十、移动数据 76 (一)移动数据的整体架构 76 (二)目录对象 76 (三)使用 SQL*Loader 77 (四)数据泵 78 (五)外部表 80 十一、性能管理基础 82 (一)性能监视 82 (二)性能监视 82 (三)管理内存组件 83 (四)使用内存指导 83 (五)使用动态性能视图 84 (六)故障排除和优化视图 85 (七)无效和不可用对象 85 =======第二篇:备份与恢复======= 86 一、备份和恢复的基本概念 86 (一)衡量数据库可恢复性的两个指标 86 (二)数据库故障的类型 86 (三)配置数据库的可恢复性 88 (四)归档日志文件 88 (五)启用 ARCHIVELOG(归档)模式 89 (六)Oracle 数据库备份的解决方案 89 二、闪回 90 (一)什么是闪回 Flashback? 90 (五)闪回查询:Flashback Query 91 (六)闪回版本查询:Flashback Version Query 92 (七)闪回表:Flashback Table 93 (八)闪回数据库:Flashback Database 94 (九)闪回删除:Flashback Drop 95 (十)闪回事务查询:Flashback Transaction Query 96 (十一)闪回数据归档:Flashback Data Archive 98 三、用户管理的备份 101 (一)用户管理的备份简介 101 (二)第一个手工备份和恢复 102 (三)冷备份的脚本 103 (四)热备份的脚本:PLSQL 程序 103 四、用户管理的恢复 105 (一)归档模式下的完全 105 (二)非归档模式下的恢复 7 (三)不完全恢复 8 五、RMAN 备份与恢复基础 11 (一)备份与恢复基本术语 11 (二)RMAN 基本架构和命令 12 六、RMAN 的备份 13 (一)RMAN 脚本基础 13 (二)RMAN 的冷备份 13 (三)RMAN 的热备份 14 (四)增量备份 14 (五)镜像拷贝 14 (六)控制文件和归档文件的备份 15 七、RMAN 的恢复 15 (二)归档模式下的完全恢复 16 (二)非归档模式下的完全恢复 21 (三)RMAN 的不完全恢复 22 (四)RMAN 恢复的其他几个案例 23 八、RMAN 的高级设置 27 (一)RMAN 的参数设置 27 (二)什么是目录数据库? 28 (三)创建目录数据库 29
CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 Oracle Database 11g数据库管理艺术(涵盖DBA必知必会的所有数据库管理知识) 基本信息 原书名: Expert Oracle Database 11g Administration 原出版社: Apress 作者: (美)Sam R.Alapati 译者: 钟鸣 杨桦 杨卫军 孙登峰 丛书名: 图灵程序设计丛书 数据库 出版社:人民邮电出版社 ISBN:9787115227867 上架时间:2010-6-2 出版日期:2010 年6月 开本:16开 页码:1033 版次:1-1 所属分类:计算机 > 数据库 > Oracle 内容简介   本书针对大多数日常的oracle database 11g数据库管理任务,全面覆盖dba行业知识,并将理论与实践相结合,旨在为初中级dba提供高效运行数据库所需的方方面面的知识,帮助他们从oracle公司发行的大量资料中找到自己需要的信息。书中内容主要集中在大多数企业常见的问题之上,如安装和升级到oracle database 11g数据库软件、创建数据库、导出和导入数据、数据库的备份与恢复、性能调优,等等。   本书还提供了dba完成本职工作必备的基本的uniix、sql、pl/sql和数据建模的知识,也给出了许多富有趣味性的例子,通过这些实例详细、循序渐进地说明了oracle database 11g数据库的各个概念和特性。 作译者   Sam R. Alapati是世界顶尖的Oracle技术专家,一位从业20余年的资深数据库管理员。他拥有Oracle OCP DBA证书和HP UNIX System Administrator证书,做过Oracle公司的高级顾问,并曾在AT&T、NBC等世界顶级公司担任DBA。目前,他管理着世界上最大的Oracle数据库——美国童子军全国总部数据库。除本书外,他还编写了Oracle公司OCP考试的官方教材。   作者: (美)sam r.alapati Sam R.Alapati是世界顶尖的Oracle技术专家,一位经验丰富的数据库管理员,有20多年从业经历。他拥有Oracle OCP DBA证书和HP UNIX System Administrator证书,曾经担任Oracle公司的高级顾问,并在AT&T、雷曼兄弟、NBC等世界顶级公司担任DBA。目前,他管理着世界上最大的Oracle数据库之一——美国童子军全国总部数据库。除本书外,他还是Oracle公司OCP考试官方教材的作者。 目录 封面 -31 封底 -30 书名 -29 版权 -28 版权声明 -27 译者序 -26 致谢 -25 前言 -23 目录 -14 第一部分 背景知识、数据建模、UNIX/Linux和SQL*Plus 1 第1章 Oracle DBA的世界 2 1.1 Oracle DBA的任务 2 1.1.1 DBA的安全任务 3 1.1.2 DBA的系统管理任务 3 1.1.3 DBA的数据库设计任务 5 1.2 不同的DBA工作分类 6 1.3 数据库的类型 6 1.3.1 联机事务处理和决策支持系统数据库 6 1.3.2 开发、测试和产品数据库 7 1.4 培训和认证 7 1.4.1 培训 7 1.4.2 认证 8 1.4.3 Oracle DBA的资源和组织 10 1.4.4 Oracle示例 11 1.4.5 Oracle数据库的两天DBA课程 11 1.4.6 Oracle MetaLink 11 1.4.7 Oracle Web Conference 12 1.5 普通Oracle DBA的日常工作 12 1.6 几点建议 12 1.6.1 知道何时寻求帮助 12 1.6.2 记住你并不孤单 13 1.6.3 站在全局看问题 13 1.6.4 首先是不要造成损害 13 第2章 关系数据库建模及数据库设计 14 2.1 关系数据库简介 14 2.2 关系数据库模型 15 2.2.1 数据库模式 15 2.2.2 关系代数 15 2.2.3 关系演算 16 2.2.4 SQL 16 2.3 关系数据库的生命周期 17 2.3.1 需求收集和分析 17 2.3.2 逻辑数据库设计 18 2.3.3 物理数据库设计 25 2.3.4 实现物理设计 27 2.4 反向设计数据库 28 2.5 对象
<p> <strong><span style="font-size:16px;color:#003399;">会用Python分析金融数据 or 金融行业会用Python</span></strong> </p> <p> <strong><span style="font-size:16px;color:#003399;">职场竞争力更高</span></strong> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdnimg.cn/202012231042221925.png" alt="" /> </p> <p> <br /> </p> <p> <br /> </p> <p> <strong><span style="font-size:16px;color:#003399;">Python金融数据分析入门到实战</span></strong> </p> <p> <strong><span style="font-size:16px;color:#003399;">Get√金融行业数据分析必备技能</span></strong> </p> <p> <img src="https://img-bss.csdnimg.cn/202012231042438069.png" alt="" /> </p> <p> <br /> </p> <p> <br /> </p> <p> <strong><span style="font-size:16px;color:#003399;">以股票量化交易为应用场景</span></strong> </p> <p> <strong><span style="font-size:16px;color:#003399;">完成技术指标实现的全过程</span></strong> </p> <p> <br /> </p> <p> <span style="font-size:14px;">课程选取股票量化交易为应用场景,由股票数据的获取、技术指标的实现,逐步进阶到策略的设计</span><span style="font-size:14px;">和回测,由浅入深、由技术到思维地为同学们讲解Python金融数据分析在股票量化交易中的应用</span><span style="font-size:14px;">。</span> </p> <p> <br /> </p> <p> <span style="font-size:14px;"><br /> </span> </p> <p> <img src="https://img-bss.csdnimg.cn/202012231043183686.png" alt="" /> </p> <p> <br /> </p> <p> <br /> </p> <p> <strong><span style="font-size:16px;color:#003399;">以Python为编程语言</span></strong> </p> <p> <strong><span style="font-size:16px;color:#003399;">解锁3大主流数据分析工具</span></strong> </p> <p> <br /> </p> <p> <span style="font-size:14px;">Python做金融具有先天优势,课程提取了Python数据分析工具NumPy、Pandas及可视化工具</span><span style="font-size:14px;">Matplotlib的关键点详细讲解,帮助同学掌握数据分析的关键技能。</span> </p> <p> <img src="https://img-bss.csdnimg.cn/202012231043472858.png" alt="" /> </p> <p> <strong><span style="font-size:16px;color:#003399;"><br /> </span></strong> </p> <p> <strong><span style="font-size:16px;color:#003399;">2大购课福利</span></strong> </p> <p> <strong><span style="font-size:16px;color:#003399;"><br /> </span></strong> </p> <p> <img src="https://img-bss.csdnimg.cn/202012300628195864.png" alt="" /> </p>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页