阅读之SQL优化
一、性能不理想的系统中除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的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优化的更多相关文章
- 阅读笔记06-架构师必备最全SQL优化方案(2)
四.基础优化 1.优化思路? 定位问题点吮吸:硬件-->系统-->应用-->数据库-->架构(高可用.读写分离.分库分表). 处理方向:明确优化目标.性能和安全的折中.防患未然 ...
- 云时代架构阅读笔记十一——数据库SQL优化
网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 ...
- 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)
基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编 ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...
- 一次非常有意思的sql优化经历
补充:看到这么多朋友对sql优化感兴趣,我又重新补充了下文章的内容,将更多关于sql优化的知识分享出来, 喜欢这篇文章的朋友给个赞吧,哈哈,欢迎交流,共同进步. 2015-4-30补充:非常感觉编辑的 ...
- MySQL 数据库性能优化之SQL优化
前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧. 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础. 优化目标 ...
- 数据库SQL优化大总结之百万级数据库优化方案
网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 这篇文章我花费了大量的时间查找资料.修改.排版,希望大家阅读之后,感觉 ...
- (转)数据库SQL优化大总结之 百万级数据库优化方案
网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 这篇文章我花费了大量的时间查找资料.修改.排版,希望大家阅读之后,感觉 ...
- SQL优化的四个方面,缓存,表结构,索引,SQL语句
一,缓存 数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所 ...
- 智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )
SQL Optimizer for SQL Server 帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 SQL Optimizer for SQL Server 让 SQL Serve ...
随机推荐
- 线性模型-线性回归、Logistic分类
线性模型是机器学习中最简单的,最基础的模型结果,常常被应用于分类.回归等学习任务中. 回归和分类区别: 回归:预测值是一个连续的实数: 分类:预测值是离散的类别数据. 1. 线性模型做回归任务 ...
- USACO4.3 Street Race【分析】
这道题,感觉不是很难,分析清楚之后非常简单.(标签都不知道怎么加) 读完题首先想到了分割点一定是必经点的一种特殊情况,如果分割点不是必经点的话,那么它就不能把这个图分成两半(存在不经过它的边沟通两半) ...
- lua基础学习(二)
一,Lua变量 1.lua变量的三种类型:全局变量,局部变量,表中的域 Lua 中的变量全是全局变量,那怕是语句块或是函数里,除非用 local 显式声明为局部变量. 局部变量的作用域为从声明位置 ...
- [ASP.NET] [JS] GridView点击高亮当前选择行,并在点击另一行时恢复上一选择行背景颜色
在ASP.NET中的gridview控件里面可以通过设定其OnRowDataBound事件来进行实现高亮当前行的操作 前端控件的设置: 只要设置好OnRowDataBound属性即可,会自动在.cs文 ...
- HDU 1171 Big Event in HDU (动态规划、01背包)
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- [转帖]2018年全球ERP软件行业市场规模与发展趋势分析 云ERP将兴起【组图】
2018年全球ERP软件行业市场规模与发展趋势分析 云ERP将兴起[组图] https://www.qianzhan.com/analyst/detail/220/190215-4b1d6868.ht ...
- 小记---------idea新手操作
加载jar包 file---project structrue ---modules---dependencies---- 点+号 选择idea软件的位置的lib 添加自带的jar包,or ...
- 面试官:new一个对象有哪两个过程?
Java在new一个对象的时候,会先查看对象所属的类有没有被加载到内存,如果没有的话,就会先通过类的全限定名来加载.加载并初始化类完成后,再进行对象的创建工作. 我们先假设是第一次使用该类,这样的话n ...
- C++笔记(0)——判定一个数字是否是素数
博主之前使用的编程语言是Python,但是这门语言的效率比较低(通常,不优化的情况下,但是即便如此我还是偏爱Python),而且博主打算参加PAT考试(真正的原因),及博主打算顺便深入学习下机器学习框 ...
- PythonDay16
第十六章模块 今日内容 自定义模块 time模块 datetime模块 rendom模块 自定义模块 # import 模块 例:import time# 导入的是time模块中所有的内容(变量,函数 ...