一、性能不理想的系统中除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的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. 什么是lambda?有什么好处

    lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数 1.lambda 函数比较轻便,即用即仍,很适合需要完成一项功能,但是此功能只在此一处使用,连名字都很随意的情况 ...

  2. java:JSP(JSPWeb.xml的配置,动态和静态导入JSP文件,重定项和请求转发,使用JSP实现数据库的增删改查实例)

    1.JSP的配置: <%@ page language="java" import="java.util.*" pageEncoding="UT ...

  3. IOS CocoaPods的用法

    自从有了CocoaPods以后,这些繁杂的工作就不再需要我们亲力亲为了,只需要我们做好少量的配置工作,CocoaPods会为我们做好一切   一.什么是CocoaPods 1.为什么需要CocoaPo ...

  4. Shell编程、part5

    本节内容 1. 三剑客简介 2. sed命令详解 3. awk命令详解 文本处理三剑客 在 Shell 下使用这些正则表达式处理文本最多的命令有下面几个工具: |                 命令 ...

  5. HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码

    原文地址:HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向 常用方法 如何重定向 响应编码 响应乱码 HttpServletRespo ...

  6. ArrayList(顺序表)和LinkedList(链表)的区别联系,优劣取舍问题

    ArrayList和LinkedList都是List接口的实现类.主要区别如下: 最主要的区别是底层的数据结构不同: 1)ArrayList相当于一个动态数组,需要随机访问列表中的元素时,ArrayL ...

  7. eclipse中svn的使用

    1.在eclipse中添加SVN插件或者说直接利用eclipse软件中的help-install项进行网站在线下载也可 2.安装好SVN之后, 2.1.从SVN检出项目到本地 右击鼠标-选import ...

  8. Centos7 升级php版本到php7

    一.首先查看是否有老版本 yum list installed | grep php 二.如果安装的有 yum remove php.x86_64 php-cli.x86_64 php-common. ...

  9. TS学习

    随着vue3.0的即将到来,是时候学习一下TS了 简介:TypeScript是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类 ...

  10. FP Style 的快排

    const quickSort = (list) => { if (!list || !list.length) return []; if (list.length === 1) return ...