阅读本文大概需要 2.8 分钟. MySQL 对我说 “Too young, too naive!" ▌大概过程 在测试环境 Docker 容器中,在跨进程调用服务的时候,A 应用通过 Dubbo 调用 B 应用的 RPC 接口,发现 B 应用接口超时错误,接着通过 debug 和日志,发现具体耗时的地方在于一句简单 SQL 执行,但是耗时超过 1000ms. 通过查看数据库的进程列表,发现是有死锁锁表了,很多进程状态 status 处于 'sending data',最后为锁住的表添加索引,并…
作者:VipAugus https://juejin.im/post/5ce906a3e51d455a2f2201dc MySQL对我说"Too young, too naive!" 大概过程 在测试环境Docker容器中,在跨进程调用服务的时候,A应用通过Dubbo调用B应用的RPC接口,发现B应用接口超时错误,接着通过debug和日志,发现具体耗时的地方在于一句简单SQL执行,但是耗时超过1000ms. 通过查看数据库的进程列表,发现是有死锁锁表了,很多进程状态status处于's…
转载地址:http://bbs.csdn.net/topics/260002113 我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习.摘录.并汇总部分资料与大家分享!(1)      选择最有效率的表名顺序(只在基于规则的优化器中有效):ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接…
一.MySQL 基础架构   整体来说 MySQL 主要分为两个部分,一个部分是:Server 层,另一部分是:存储引擎层. 其中 Server 层包括有连接器.查询缓存.分析器.优化器.执行器等,存储引擎层支持 InnoDB.MyISAM.Memory 等. 现在最常用的存储引擎是 InnoDB,同时也是 MySQL 默认的存储引擎. 通过分析器知道要做什么. 通过优化器知道怎么做. 通过执行器调用存储引擎接口,进行数据的查询.   俗话说:"一图胜千言",我们还是来看下面这张流程图…
http://mp.weixin.qq.com/s/DkIPwbDKIjH2FMN13GkT4w 本次分享的内容是基于Oracle的SQL优化,以一条巨慢的SQL为例,从快速解读SQL执行计划.如何从执行计划中找到SQL执行慢的Root Cause.统计信息与cardinality问题.探索性能杀手Filter操作.如何进行逻辑重写让SQL起飞等多个维度进行解析,最终优化巨慢SQL语句,希望能够抛砖引玉,和大家一起探讨SQL优化方法. 另外,还简单介绍了两种解决疑难SQL优化问题的工具:1005…
本文根据DBAplus社群第110期线上分享整理而成,文末还有好书送哦~ 讲师介绍 丁俊 新炬网络首席性能优化专家 SQL审核产品经理 DBAplus社群联合发起人.<剑破冰山-Oracle开发艺术>副主编 Oracle ACEA,ITPUB开发版资深版主,十年电信行业从业经验 本次分享的内容是基于Oracle的SQL优化,以一条巨慢的SQL为例,从快速解读SQL执行计划.如何从执行计划中找到SQL执行慢的Root Cause.统计信息与cardinality问题.探索性能杀手Filter操作…
现在公司使用mybatis作为DAL层的框架. 使用起来比较简单,使用xml进行SQL的书写,java代码使用接口执行. 但在写一些简单SQL的时候会显得非常繁琐: xml和java分离(设计上为了解耦),一些字段是否设置等需要反复查看(虽然可以通过插件直达); 原生无法热加载,修改xml后需要重启(可以使用三方实现); xml的动态SQL没有java灵活. 上述这些"缺点"仅仅针对写简单的sql,特别是第一条. 我对一张表的需求是简单的CRUD,那使用xml就会非常麻烦. 最基本的需…
导读 Hi,大家好!我是白日梦!本文是MySQL专题的第 24 篇. 今天我要跟你分享的MySQL话题是:"从一条update sql执行都经历什么开始,发散开一系列的问题,看看你能抗到第几问吧" 换一种写作风格,自导自演面试现场!感觉这样还是比较有趣的,欢迎大家订阅我的MySQL专题,公众号首发!持续更新中- 点击阅读原文,格式会好看一点哦- 点击阅读原文,格式会好看一点哦- 点击阅读原文,格式会好看一点哦- 欢迎关注白日梦,公众号首发!持续连载中 1 好!我们开始吧!       …
对数据库基本操作是每个程序员基本功,如何理解并快速记住sql执行的顺序呢,其实一条复杂的sql就能搞定: SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <h…
转: log4j.xml简单配置实现在控制台打印sql执行语句 2017年09月27日 13:02:34 艾然丶 阅读数 8804   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_33550166/article/details/78111673 先上配置代码!  [要在log4j.xml中增加的在控制台打印sql的配置:] <log4j:configuration xmlns:…
Atitit sql执行计划 1.1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的 Oracle中的执行计划显示在执行一条SQL语句时必须执行的详细步骤,通常以表格形式呈现,但其实是树形结构.查看Oracle中的执行计划一般有以下几种方法(包括但不限于). 不要把SQL语句写得太复杂 我经常看到,从数据库中捕捉到的一条SQL语句打印出来有2张A4纸这么长.一般来说这么复杂的语句通常都是有问题的.我拿着这2…
索引对大数据的查询速度的提升是非常大的,Explain可以帮你分析SQL语句是否用到相关索引. 索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本.MySQL在300万条记录左右性能开始逐渐下降,虽然官方文档说500~800w记录,所以大数据量建立索引是非常有必要的.MySQL提供了Explain,用于显示SQL执行的详细信息,可以进行索引的优化. 一.导致SQL执行慢的原因: 1. 硬件问题.如网络速度慢,内存不足,I/O吞吐量小,磁盘空间满了等. 2. 没有索引或者索…
作者介绍 梁敬彬,福富研究院副理事长.公司唯一四星级内训师,国内一线知名数据库专家,在数据库优化和培训领域有着丰富的经验.多次应邀担任国内外数据库大会的演讲嘉宾,在业界有着广泛的影响力.著有多本畅销书籍,代表作有<收获,不止SQL优化>等. 前两章给大家介绍了发现问题后的整体解决思路,接下来进入SQL优化的局部性思路,这一章我们将学习SQL优化的重要知识:执行计划. 执行计划是什么?如何读懂执行计划?读懂执行计划对我们又有什么用?面对这些疑问,我们从执行计划分析概述.读懂执行计划的关键.从案例…
索引对大数据的查询速度的提升是非常大的,Explain可以帮你分析SQL语句是否用到相关索引. 索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本.MySQL在300万条记录左右性能开始逐渐下降,虽然官方文档说500~800w记录,所以大数据量建立索引是非常有必要的.MySQL提供了Explain,用于显示SQL执行的详细信息,可以进行索引的优化. 一.导致SQL执行慢的原因: 1. 硬件问题.如网络速度慢,内存不足,I/O吞吐量小,磁盘空间满了等. 2. 没有索引或者索…
概述 在业务数据库性能问题诊断中,如果发现一个业务性能很差跟某个SQL有关,应用连接池几乎被该SQL占满,同时数据库服务器上也不堪重负.此时情况很紧急,业务改SQL重发布已经来不及了,运维能选择的操作不多.如批量重启应用.数据库切换或者重启.此时业务中断一下,很可能很快压力又上来,问题依然在那个SQL.前篇文章<阿里数据库性能诊断的利器——SQL全量日志>分享了如何定位问题SQL,本文就分享阿里数据库们如何处理这个问题SQL. ORACLE在SQL性能诊断方面的功能非常丰富,一直被其他数据库模…
SQL Server执行计划的理解 要理解执行计划,怎么也得先理解,那各种各样的名词吧.鉴于自己还不是很了解.本文打算作为只写懂的,不懂的懂了才写. 在开头要先说明,第一次看执行计划要注意,SQL Server的执行计划是从右向左看的.       小技巧:在执行前按一下  ctrl+M,然后执行语句,就可以在下面看到执行计划的窗口. 名词解析: 扫描:逐行遍历数据. 先建立一张表,并给大家看看大概是什么样子的. CREATE TABLE Person( Id int IDENTITY(1,1)…
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机整数, 可使用以下语句: SELECT FLOOR(7 + (RAND() * 6)); 以上摘抄自MySQL手册 从 Mysql 表中随机读取数据不难,方法还挺多的,但是如果要考虑效率,得到一个快速的高效率的方法,那就不是一件简单的事情了(至少对我来说不简单). 随机获得Mysql数据表的一条或多…
in和exists的区别与SQL执行效率最近很多论坛又开始讨论in和exists的区别与SQL执行效率的问题,本文特整理一些in和exists的区别与SQL执行效率分析 SQL中in可以分为三类: 1.形如select * from t1 where f1 in ('a','b'),应该和以下两种比较效率 select * from t1 where f1='a' or f1='b' 或者 select * from t1 where f1 ='a' union all select * fro…
可总结为:当子查询表比主查询表大时,用Exists:当子查询表比主查询表小时,用in SQL中in可以分为三类: 1.形如select * from t1 where f1 in ('a','b'),应该和以下两种比较效率 select * from t1 where f1='a' or f1='b' 或者 select * from t1 where f1 ='a' union all select * from t1 f1='b' 你可能指的不是这一类,这里不做讨论. 2.形如select…
sql执行计划解析案例(二)   今天是2013-10-09,本来以前自己在专注oracle sga中buffer cache 以及shared pool知识点的研究.但是在研究cache buffer chain的时候发现了一个语句: select * from (select addr,ts#,file#,dbarfil,dbablk,tch from x$bh order by tch desc) where rownum<20,当时觉得很诧异,为什么要这么写呢?就是这一个语句让我开始接触…
简单的sql注入1 看着这个简单的界面,一时间没有特别好的思路,先输入一个1',发生了报错 初步猜测这是一个字符型的注入,他将我们输入的语句直接当成sql语句执行了,按题目的意思后面肯定过滤了很多注入语句,我就先来尝试一些基本的语句 难道把union select都给过滤了?一阵绝望后接着试,试了好多后完全没思路 接着大概就是传说中的运气吧 这两个现象让我猜测过滤的是两个空格以及空格中间的字符串,绕过空格有好多方法:+,/**/,%0a,这里我用/**/代替空格构造一个查询语句: 拿到数据库,接…
SQL优化 MySQL版 -分析explain SQL执行计划 作者 Stanley 罗昊 [转载请注明出处和署名,谢谢!] 首先我们先创建一个数据库,数据库中分别写三张表来存储数据; course:课程表 teacher:教师表 teacherCarid:教师证表 现在我把这三张表连起来查,查询条件:查询课程编号为2或教师证编号为3点老师信息: 通过这个例子,我们就可以把explain里面的参数一个一个的讲讲: 首先这个条件的主干是查询老师信息: sql语句:select t.* From t…
简介 文中内容均为阅读前辈的文章所整理而来,参考文章已在最后全指明 本文分为上下两篇: 上篇:MySQL 的 SQL 执行分析 下篇:MySQL 性能优化 后端开发必然会接触到数据库,数据层的优劣会影响整个服务的响应时间.所以,数据库的优化技巧是必须掌握的,下面就是我在学习过程中整理的,备忘. 下面为上篇内容,分为以下部分: 一.SQL 执行时间分析 二.SQL 执行情况分析 一.SQL 执行时间分析 通过找到执行时间长的 SQL 语句,可以直观的发现数据层的效率问题. 1.通过 show pr…
SQL执行效率总结 1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况 p4: 2.4 内存: 1 G os: windows 2003 数据库: ms sql server 2000 目的: 查询性能测试,比较两种查询的性能 SQL查询效率 step by step -- setp 1. -- 建表 create table t_userinfo ( userid int identity(1,1) primary key nonclustered, nick varch…
一段SQL代码写好以后,可以通过查看SQL的执行计划,初步预测该SQL在运行时的性能好坏,尤其是在发现某个SQL语句的效率较差时,我们可以通过查看执行计划,分析出该SQL代码的问题所在.  那么,作为开发人员,怎么样比较简单的利用执行计划评估SQL语句的性能呢?总结如下步骤供大家参考:  1. 打开熟悉的查看工具:PL/SQL Developer.    在PL/SQL Developer中写好一段SQL代码后,按F5,PL/SQL Developer会自动打开执行计划窗口,显示该SQL的执行计…
声明 5.6中desc看不到show warnings,也看不到filtered列 5.7的desc等于5.6的desc extended,这样可以看show warnings,5.6中filtered列非常不准,5.7好一些 先看一个执行计划 (root@localhost) [test]> desc select * from l; +----+-------------+-------+------------+------+---------------+------+---------…
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机整数, 可使用以下语句: SELECT FLOOR(7 + (RAND() * 6)); 以上摘抄自MySQL手册 从 Mysql 表中随机读取数据不难,方法还挺多的,但是如果要考虑效率,得到一个快速的高效率的方法,那就不是一件简单的事情了(至少对我来说不简单). 随机获得Mysql数据表的一条或多…
sql 被保存在 share pool 后, 开始解析, 解析包括语句的语法, 检验及对象, 以确认该用于是否有该对象的权限, 如果这些都通过了, 接下来就要看这个语句之前是否被执行过, 如果是, oracle 将取回之前解析的信息并重用, 这就是软解析, 如果没有被执行过, 那么oracle就将执行所有的工作来为当前语句生成执行计划, 并将它存在于缓存中以便将来使用, 这就是硬解析. 硬解析需要做很多工作, 如果想看硬解析都干了什么, 最简单的办法是打开扩展SQL追踪, 执行一个语句然后查询追…
要理解执行计划,怎么也得先理解,那各种各样的名词吧.鉴于自己还不是很了解.本文打算作为只写懂的,不懂的懂了才写. 在开头要先说明,第一次看执行计划要注意,SQL Server的执行计划是从右向左看的. 名词解析: 扫描:逐行遍历数据. 先建立一张表,并给大家看看大概是什么样子的. CREATE TABLE Person( Id int IDENTITY(1,1) NOT NULL, Name nvarchar(50) NULL, Age int NULL, Height int NULL, Ar…
1.首先,select top用法: 参考问题 select top n * from和select * from的区别 select * from table -- 取所有数据,返回无序集合 select top n * from table -- 根据表内数据存储顺序取前n条,返回无序集合 select * from table order by id desc -- 取所有数据,按id逆序返回有序列表 select top n * from table order by id desc--…