- 浏览: 179854 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (174)
- rails (25)
- js (15)
- ruby (30)
- webserver (5)
- mysql (13)
- security (5)
- thinking (5)
- common sense (2)
- linux (18)
- android (26)
- web browser (1)
- config and deploy (1)
- mac (5)
- css (2)
- db (8)
- version manager (1)
- editor (1)
- job (1)
- OOA (1)
- php (1)
- apache (2)
- mongrel (1)
- Mongodb (1)
- facebook (1)
- 架构 (1)
- 高并发 (1)
- twitter (1)
- Erlang (1)
- Scala (1)
- Lua (1)
- ubuntu (3)
- cache (1)
- 面试题 (2)
- android layout (2)
- android控件属性 (2)
- java (5)
- customize view (1)
- advanced (2)
- python (2)
- 机器学习 (5)
最新评论
第3章 面向程序员的数据库访问性能优化法则
编者说明:本章原为叶正盛同学发表在CSDN 博客的一篇技术文章,虽然其内容是“面向程序员”的,但是对于DBA 们仍然具有极大的借鉴意义,从来开发和数据库就是密不可分的。如果开发层面能够减少失误,则DBA就可以轻松许多;而正是由于开发人员对于数据库的理解不 足,才导致今天DBA 们大有可为。这篇文章可以让开发人员加深对于数据库的认知和了解,也可以帮助DBA 们理解开发人员的思路、想法和工作方式。
作者说明:
(1)本文只是面对数据库应用开发的程序员,不适合专业DBA。DBA 在数据库性能优化方面需要了解更多的知识。
(2)本文的许多示例及概念是基于Oracle 数据库描述的,对于其他关系型数据库也可以参考,但许多观点不适合KV 数据库或内存数据库,或者是基于SSD 技术的数据库。
(3)本文未深入数据库优化中最核心的执行计划分析技术。
读者对象:
开发人员:如果你是做数据库开发的,那本文的内容非常适合,因为本文是从程序员的角度来谈数据库性能优化。
架构师:如果你已经是数据库应用的架构师,那本文的知识你应该清楚90%,否则你可能是一个喜欢折腾的架构师。
DBA(数据库管理员):大型数据库优化的知识非常复杂,本文只是从程序员的角度来谈性能优化,DBA 除了需要了解这些知识外,还需要深入数据库的内部体系架构来解决问题。
数据库访问优化法则简介
引言
在网上有很多文章介绍数据库优化知识,但是大部分文章只是对某个方面进行说明,而对于程序员来说通过这种介绍并不能很好地掌握优化知识,因为很多介绍只适用于一些特定的场景,有时则会产生误导,或让程序员感觉不明白其中的奥妙而对数据库优化感觉很神秘。
很多程序员总是问如何学习数据库优化,有没有好的教材之类的问题。在书店也看到了许多数据库优化的专业书籍,但是感觉更多的是面向DBA 或者是PL/SQL 开发方面的知识,感觉不太适合普通程序员。而要想做数据库优化的高手,不是花几周、几个月就能达到的。这并不是因为数据库优化有多高深,而是因为要做好优 化一方面需要有非常好的技术功底,对操作系统、存储硬件网络、数据库原理等方面有比较扎实的基础知识;另一方面是需要花大量时间对特定的数据库进行实践测 试与总结。
作为一个程序员,我们也许不清楚线上正式的服务器硬件配置,我们不可能像DBA那样专业地对数据库进行各种实践测试与总结,但我们都应该非常了解 SQL 的业务逻辑,清楚SQL 中访问表及字段的数据情况,我们其实只需要关心我们的SQL 是否能尽快返回结果。那程序员如何利用已知的知识进行数据库优化呢?如何能快速定位SQL 性能问题并找到正确的优化方向?
面对这些问题,笔者总结了一些面向程序员的基本优化法则,本文将结合实例来阐述数据库开发的优化知识。
要正确地优化SQL,我们需要快速定位性能的瓶颈点,也就是说快速找到SQL 主要的开销在哪里。而大多数情况性能最慢的设备会是瓶颈点,如下载时网络速度可能会是瓶颈点,本地复制文件时硬盘可能会是瓶颈点,为什么这些一般的工作我 们能快速确认瓶颈点呢?因为我们对这些慢速设备的性能数据有一些基本的认识,如网络带宽是2Mb/s,硬盘是每分钟7200 转,等等。因此,为了快速找到SQL 的性能瓶颈点,我们也需要了解计算机系统的硬件基本性能指标,图3-1 展示的是当前主流计算机的性能指标数据。
从图3-1 中可以看到基本上每种设备都有两个指标:
延时(响应时间):表示硬件的突发处理能力。
带宽(吞吐量):代表硬件的持续处理能力。
从图3-1 中可以看出,计算机系统的硬件性能从高到低依次为:
CPU——Cache(L1-L2-L3)——内存——SSD 硬盘——网络——硬盘
由于SSD 硬盘还处于快速发展阶段,所以本文的内容不涉及SSD 相关应用系统。
根据数据库知识,我们可以列出每种硬件主要的工作内容:
CPU 及内存:缓存数据访问、比较、排序、事务检测、SQL 解析、函数或逻辑运算。
网络:结果数据传输、SQL 请求、远程数据库访问(dblink)。
硬盘:数据访问、数据写入、日志记录、磁盘排序、某些大表连接操作。
根据当前计算机硬件的基本性能指标及其在数据库中的主要操作内容,可以整理出如图3-2 所示的数据库性能基本优化法则。
这个优化法则归纳为5 个层次:
(1)减少数据访问(减少磁盘访问)。
(2)返回更少数据(减少网络传输或磁盘访问)。
(3)减少交互次数(减少网络传输)。
(4)减少服务器CPU 开销(减少CPU 及内存开销)。
(5)利用更多资源(增加资源)。
由于每一层优化法则都是解决其对应硬件的性能问题,所以带来的性能提升比例也不一样。传统数据库系统设计也是尽可能对低速设备提供优化方法,因此针 对低速设备问题的可优化手段也更多,优化成本也更低。我们任何一个SQL 的性能优化都应该按这个规则由上到下来诊断问题并提出解决方案,而不应该首先想到的是增加资源解决问题。
以下是每个优化法则层级对应的优化效果及成本经验参考:
1.数据块(Block)
数据块是Oracle 数据库中数据在磁盘中存储的最小单位,也是一次IO 访问的最小单位,一个数据块通常可以存储多条记录,数据块大小是DBA 在创建数据库或表空间时指定的,可指定为2KB、4KB、8KB、16KB 或32KB。图3-3 是一个Oracle 数据库典型的物理结构,一个数据库可以包括多个数据文件,一个数据文件内又包含多个数据块。对于其他关系型数据库也有类似的架构,有些数据库把数据块称为 数据页(Page),大小为8KB 或16KB。
2.ROWID
ROWID 是每条记录在Oracle 数据库中的唯一标识,通过ROWID 可以直接定位记录到对应的文件号及数据块位置。ROWID 内容包括文件号、对象号、数据块号、记录槽号,如图3-4 所示。
发表评论
-
warning: World-writable config file my.cnf is ignored
2017-09-03 16:41 896##warning: World-writable con ... -
pagination
2014-03-02 16:53 549http://www.infony.com.cn/201 ... -
mysql连接查询
2012-02-17 11:25 1347Sql语句中where,group by,order by及l ... -
MYSQL常见出错代码 mysql error number
2012-02-17 10:49 30891016错误:文件无法打开 ... -
设置mysql在局域网中访问
2012-02-09 10:03 878第一:更改 “mysql” 数据库里的 “user” 表里 ... -
经典sql语句
2012-01-09 12:54 810说明:复制表(只复制结构,源表名:a 新表名:b) ... -
ubuntu下安装mongoDB
2011-09-08 00:05 1139ubuntu下安装mongoDB $ id sim ... -
mongodb vs mysql
2011-09-07 12:00 1165MongoDB是一个基于分布式 ... -
Logging
2011-09-06 17:01 754log all visits to your web s ... -
memcache
2011-08-26 13:19 864install memcache : If you want ... -
basis and exercise
2011-08-25 18:19 755select now(); select CURDATE() ... -
缓存技术
2011-06-19 19:46 879原文地址:http://blog.csdn.net/fanwe ... -
mysql数据库设计
2011-06-15 16:59 10021. 适度冗余: 让query尽量 ... -
mongodb
2011-05-24 20:38 1346$ id simon $ sudo apt-key adv ... -
抽象SQL参数化查询
2011-05-11 12:16 1591一、定义 参数化查询 (Paramete ... -
安装mysql-5.0
2011-04-08 19:31 1321Linux (non RPM packages) downl ... -
mysql grant privileges
2011-03-19 18:40 1051The EXECUTION, FILE, PROCESS, R ... -
mysql import and export
2011-03-19 18:36 2425-u -p指的是连接数据库的用户名和密码 ,不能和os的用户名 ...
相关推荐
#### 二、数据库访问优化法则简介 为了有效地进行数据库性能优化,首先需要了解计算机系统的硬件性能特点以及它们在数据库操作中的作用。以下是从硬件性能角度来看的五层优化法则: 1. **减少数据访问(减少磁盘...
#### 数据库访问优化法则简介 要实现有效的数据库访问性能优化,首先需要明确优化的目标和方向。一般来说,性能瓶颈往往出现在系统中响应时间最长或处理能力最弱的部分。例如,在数据传输过程中,网络速度可能是瓶颈...
一、数据库访问性能优化法则简介 为正确的优化SQL,我们需要快速定位性能瓶颈点,也就是说快速找到我们SQL主要的开销在哪里。大多数情况性能最慢的设备会是瓶颈点,如下载时网络速度可能会是瓶颈点,本地复制文件时...
#### 数据库访问优化法则简介 为了帮助程序员更好地理解和掌握数据库优化的知识,本文将从数据库访问的角度出发,提出一套优化法则,并结合实例进行讲解。 ### 一、数据库访问优化法则 #### 1. 减少数据访问 数据...
### 数据库优化原则详解 #### 一、百万级数据库优化策略概述 在处理大规模数据时,高效的数据库设计和优化显得尤为重要。本文档旨在提供一系列针对百万级别数据量的数据库优化建议,适用于从事程序开发的程序员及...
数据库访问性能优化是提高应用程序效率的关键环节,尤其对于数据库应用开发的程序员而言,理解并掌握这一技能至关重要。本文主要以Oracle数据库为例,虽然其他关系型数据库可以参考,但不适用于KV数据库、内存数据库...
金字塔法则认为,MySQL性能优化的关键在于建立一个多层次的优化体系,从硬件层、操作系统层、数据库层、应用程序层到架构层进行全面优化。这一法则的提出,为MySQL性能优化提供了一个系统化的方法论,为开发人员和...
在数据库访问优化方面,索引的创建和使用至关重要。不恰当的索引可能增加数据操作的负担,但正确的索引能显著提升查询速度。索引就像是数据表的目录,允许快速定位数据。创建多个索引可以针对不同的查询模式提供加速...
2021年09月16日
用户在不同地理位置可以访问存储在不同地点的数据,而且不同的数据分布方式决定了不同的数据库设计和优化策略。 分布式数据库查询优化的基本方法主要包括查询转移和查询映射: 1. 查询转移是指在分布式数据库中,...
#### 三、数据库访问性能优化法则 数据库访问性能优化可以从多个层面进行: 1. **减少数据访问**:这是优化中最基础的部分,意味着尽量减少从硬盘读取数据的需求。硬盘是访问速度较慢的设备之一,因此减少对其的...
### MySQL数据库SQL优化 #### 一、SQL优化 在MySQL数据库管理中,SQL查询的性能直接影响到系统的响应时间和资源消耗。通过合理的SQL优化,可以显著提高数据处理速度,降低服务器负载,提升用户体验。 ##### 1.1 ...
### 基于成本的Oracle优化法则 #### 成本的概念 在探讨SQL语句的成本时,需要明确“成本”的双层含义。一方面,成本指的是由解释计划(如`explain plan`)工具引起的执行次数;另一方面,则是执行SQL语句过程中...