一、性能不理想的系统中除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的SQL语句需要优化。

为了获得稳定的执行性能,SQL语句越简单越好。对复杂的SQL语句,要设法对之进行简化。

二、优化之前,首先要了解SQL的查询过程,大多数的查询优化工作实际上是遵循一些原则,使sql优化器按照预想的合理方式运行。

三、优化可能带来的问题

优化不总是对一个单纯的环境进行,还很可能是一个复杂的已投产的系统;

优化手段本来就有很大的风险,只不过你没能力意识到和预见到;

任何的技术可以解决一个问题,但必然存在带来一个问题的风险;

对于优化来说解决问题而带来的问题,控制在可接受的范围内才是有成果;

保持现状或出现更差的情况都是失败!

优化的需求:

优化中的稳定性和业务可持续性比性能更重要;

优化不可避免涉及到变更,变更就有风险;

优化使性能变好,维持和变差是等概率事件;

优化应该是各部门协同,共同参与的工作,任何单一部门都不能单独对数据库进行优化

参与优化的人员:

在进行数据库优化时,应由数据库管理员、业务部门代表、应用程序架构师、应用程序设计人员、应用程序开发人员、硬件及系统管理员、存储管理员等,业务相关人员共同参与。

四、优化思路

(1)优化什么

在数据库优化上主要有两个方面:性能和安全

安全->数据可持续性(数据保持的时间等)

性能->数据的高性能访问(是否快速、准确等)

(2)优化的范围

设计系统、定位问题和优化,都可以按照这个顺序执行。

存储、主机和操作系统方面:

主机架构稳定性;

I/O规划及配置;

Swap交换分区;

OS内核参数和网络问题。

应用程序方面:

应用程序稳定性;

SQL语句性能;

串行访问资源;

性能欠佳会话管理;

这个应用适不适合用MySQL。

数据库优化方面:

内存;

数据库结构(物理&逻辑);

实例配置。

(3)优化的维度

数据库优化包含4个维度:硬件、系统配置、数据库表结构、SQL及索引

优化的成本:硬件>系统配置>数据库表结构> SQL及索引

优化的效果:硬件<系统配置<数据库表结构< SQL及索引

五、优化的工具

数据库层面

1)MySQL

2)msyqladmin:MySQL客户端,可进行管理操作

3)mysqlshow:功能强大的查看shell命令

4)show [SESSION | GLOBAL] variables:查看数据库参数信息

5)SHOW [SESSION | GLOBAL] STATUS:查看数据库的状态信息

6)information_schema:获取元数据的方法

7)SHOW ENGINE INNODB STATUS:Innodb引擎的所有状态

8)SHOW PROCESSLIST:查看当前所有连接session状态

六、基础优化

(1)优化思路

定位问题点:硬件-->系统-->应用-->数据库-->架构(高可用、读写分离、分库分表)。

处理方向:明确优化目标、性能和安全的折中、防患未然。

(2)硬件优化

主机方面:

根据数据库类型,主机CPU选择、内存容量选择、磁盘选择:

1)平衡内存和磁盘资源;

2)随机的I/O和顺序的I/O;

3)主机 RAID卡的BBU(Battery Backup Unit)关闭。

CPU的选择:

CPU的两个关键因素:核数、主频

根据不同的业务类型进行选择:

1)CPU密集型:计算比较多,OLTP - 主频很高的cpu、核数还要多

2)IO密集型:查询比较,OLAP - 核数要多,主频不一定高的

内存的选择:

OLAP类型数据库,需要更多内存,和数据获取量级有关。

OLTP类型数据一般内存是Cpu核心数量的2倍到4倍,没有最佳实践。

存储方面:

1)根据存储数据种类的不同,选择不同的存储设备;

2)配置合理的RAID级别(raid5、raid10、热备盘);

3)对与操作系统来讲,不需要太特殊的选择,最好做好冗余(raid1)(ssd、sas、sata)。

4)raid卡:

主机raid卡选择:

实现操作系统磁盘的冗余(raid1);

平衡内存和磁盘资源;

随机的I/O和顺序的I/O;

主机raid卡的BBU(Battery Backup Unit)要关闭。

网络设备方面:

使用流量支持更高的网络设备(交换机、路由器、网线、网卡、HBA卡)

阅读之SQL优化的更多相关文章

  1. 阅读笔记06-架构师必备最全SQL优化方案(2)

    四.基础优化 1.优化思路? 定位问题点吮吸:硬件-->系统-->应用-->数据库-->架构(高可用.读写分离.分库分表). 处理方向:明确优化目标.性能和安全的折中.防患未然 ...

  2. 云时代架构阅读笔记十一——数据库SQL优化

    网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 ...

  3. 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)

    基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编   ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...

  4. 一次非常有意思的sql优化经历

    补充:看到这么多朋友对sql优化感兴趣,我又重新补充了下文章的内容,将更多关于sql优化的知识分享出来, 喜欢这篇文章的朋友给个赞吧,哈哈,欢迎交流,共同进步. 2015-4-30补充:非常感觉编辑的 ...

  5. MySQL 数据库性能优化之SQL优化

    前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧. 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础. 优化目标 ...

  6. 数据库SQL优化大总结之百万级数据库优化方案

    网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 这篇文章我花费了大量的时间查找资料.修改.排版,希望大家阅读之后,感觉 ...

  7. (转)数据库SQL优化大总结之 百万级数据库优化方案

    网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 这篇文章我花费了大量的时间查找资料.修改.排版,希望大家阅读之后,感觉 ...

  8. SQL优化的四个方面,缓存,表结构,索引,SQL语句

    一,缓存 数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所 ...

  9. 智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )

    SQL Optimizer for SQL Server 帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 SQL Optimizer for SQL Server 让 SQL Serve ...

随机推荐

  1. django 数据库操作详解

    Django配置使用mysql数据库 修改 settings.py 中的 DATABASES  注意:django框架不会自动帮我们生成mysql数据库,所以我们需要自己去创建. DATABASES ...

  2. gcc编译器创建和使用静态库、动态库

    http://www.cnblogs.com/dyllove98/archive/2013/06/25/3155599.html 目录树结构: test/include/hello.h #ifdef ...

  3. Unity中的动画系统和Timeline(5) Timeline

    在前面的动画,都是控制单独的物体,比如说控制一个角色的运动.而Timeline,可以对多个物体实施动画,形成过场动画,或者电影效果.比如,很多赛车游戏比赛开始前都会播放一段开场动画,围绕自己车的几个方 ...

  4. DSP28335 GPIO学习

    根据网络资料以及以下两篇博客整理 http://blog.sina.com.cn/s/blog_86a6035301017rr7.html http://blog.csdn.net/hmf123578 ...

  5. 微信小程序开发(三)----- 云开发案例

    1.发送请求 2.云函数中发送请求,例子request https://github.com/request/request-promise    创建云函数movielist,右键在终端打开,输入  ...

  6. excel常用公式--时间序列类

    year,month,day:返回对应于某个日期的年月日.Year作为1900 - 9999之间的整数返回. weekday:返回对应于某个日期的一周中的第几天. WEEKNUM:返回特定日期的周数. ...

  7. poj3252(数位dp)(模板)

    题目链接:https://vjudge.net/problem/POJ-3252 题意:求[l,r]之间的Round Number数,RN数即化为二进制后0的个数不少于1的个数的数. 思路:之前用组合 ...

  8. [转帖]Chrome 错误代码:ERR_UNSAFE_PORT

    Chrome 错误代码:ERR_UNSAFE_PORT 2018年07月18日 09:07:50 孤舟听雨 阅读数 182 https://blog.csdn.net/u013043762/artic ...

  9. (4.34)sql server窗口函数

    关键词:sql server窗口函数,窗口函数,分析函数 如果分析函数不可用,那么可能是版本还不支持 Window Function 包含了 4 个大类.分别是: 1 - Rank Function ...

  10. 关于eclipse设置JRebel

    版本:eclipse ee Version: 2018-09 (4.9.0) jrebel:最新2019-2 1.在eclipse->help->eclipse Marketplace 2 ...