首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    一个执行计划异常变更的案例 - 外传之绑定变量窥探

    上一篇文章《一个执行计划异常变更的案例 - 前传》(http://blog.csdn.net/bisal/article/details/53750586),介绍了一次执行计划异常变更的案例现象,这两天经过运行同事,以及罗大师的介绍,基本了解了其中的原因和处理方法,这个案例其实比较典型,涉及的知识点很多,有数据库新特性,有SQL相关的,还有应用数据质量问题,对于大师来说,是信手拈来的一次问题排查和处理,但至少对我这个仍旧艰难前行的初学者来说,值得回味的地方很丰富,所以有必要针对其中涉及的知识点做一下梳理,其中一些知识我之前了解的并不全面和深入,就自身来讲,整理学习一次,也是对自己的锻炼。

    03

    一个执行计划异常变更的案例 - 前传

    今天快下班的时候,几位兄弟来聊一个问题,大致是昨天应用使用的数据库突然出现性能问题,DBA发现有一些delete语句执行时间骤长,消耗大量系统资源,导致应用响应时间变长积Q。目前掌握的信息如下: (1) 应用已经很久未做过更新上线了。 (2) 据开发人员反馈,从之前的应用日志看,未出现处理时间逐步变长的现象。 (3) 这是一套RAC+DG的环境,版本未知,猜测至少应该是11g的版本。 (4) 这次突然出现大量执行时间超长的SQL语句,是一系列delete语句,例如delete from table where key=:1or key=:2 … key=:13这种SQL,应用正常的处理逻辑中都会使用这条语句,因此并发较高,使用了绑定变量,key字段不是主键,但有索引。目前尚不知晓字段是否存在直方图。 (5) 表的数据量大约5000万,初步反馈得知key=0的记录大约1500万,执行时间超长的SQL语句都使用了key=0的条件,至于key=0的真实数据量,以及出现问题的SQL语句使用的绑定变量具体值,这些还需要开发再次确认。 (6) DBA反馈SQL语句执行计划发生了变化,从数据库层面做了一些操作后,问题解决,目前尚不知晓做了什么具体的操作。

    04

    Oracle运算符

    单引号(’): 在Oracle中,应该只运用单引号将文本和字符和日期括起来,不能运用引号(包括单双引号)将数字括起来。 双引号(”): 在Oracle中,单双引号意思不同。双引号被用来将包含特定字符或者空格的列别名括起来。双引号还被用来将文本放入日期格式。 撇号(’): 在Oracle中,撇号也可以写成彼此相邻的两个单引号。为了在供应商名字中间查找所有带撇号的供应商名字,可以这样编写代码:select * from l_suppliers where supplier_name like ‘%”%’ &符号: 在Oracle中,&符号常用来指出一个变量。例如,&fox是一个变量,稍微有点不同的一种&& fox.每当&fox出现在Oracle脚本中时,都会要求您为它提供一个值。而运用 &&fox,您只须要在& &fox第一次出现时为它提供变量值。如果想将&符号作为普通的符号运用,则应该关上这个特征。要想关上这个特征,可以运行以下的命令: set define off ,这是一个SQLplus命令,不是一个SQL命令。SQLplus配置了SQL在Oracle中运行的环境。 双竖线(): Oracle运用双竖线表示字符串连接函数。 星号(*): select *意味着选择所有的列,count(*)意味着计算所有的行,表示通配符时,表示0个或任意多个字符。 正斜杠(/): 在Oracle中,用来终止SQL语句。更准确的说,是表示了“运行现在位于缓冲区的SQL代码”。正斜杠也用作分隔项。 多行注释: /* */ 不等于: 有多种表达方式: !=、^=、<>、not xxx=yyy、not(xxx=yyy)

    02

    4.Mysql 优化

    1.ORDER BY的优化        某些情况下,MySQL使用索引排序,尽量避免使用 filesort         即使ORDER BY与索引不完全匹配,也可以使用索引,只要索引的未使用部分和额外的ORDER BY列都是WHERE子句中的常量 constants 。如果索引不包含查询访问的 列,则仅当索引访问比其他访问方法有效时才使用索引,使用索引是否比扫描全表更有效。  SELECT * FROM t1 ORDER BY key_part1, key_part2;        在key_part1,key_part2 建立索引         查询使用SELECT*,它可以选择比key_part1和key_part2更多的列。在这种情况下,扫描整个索引并查找表行以查找不在索引中的列可能比扫描表和对结果排序更昂贵。如果是这样,优化器可能不使用索引。如果SELECT*只选择索引列,则使用索引并避免排序。

    02

    一个执行计划异常变更的案例 - 正传

    之前的几篇文章: 《一个执行计划异常变更的案例 - 前传》 《一个执行计划异常变更的案例 - 外传之绑定变量窥探》 《一个执行计划异常变更的案例 - 外传之查看绑定变量值的几种方法》 《一个执行计划异常变更的案例 - 外传之rolling invalidation》 《一个执行计划异常变更的案例 - 外传之聚簇因子(Clustering Factor)》 《一个执行计划异常变更的案例 - 外传之查询执行计划的几种方法》 《一个执行计划异常变更的案例 - 外传之AWR》 《一个执行计划异常变更的案例 - 外传之ASH》 《一个执行计划异常变更的案例 - 外传之SQL AWR》 《一个执行计划异常变更的案例 - 外传之直方图》 《一个执行计划异常变更的案例 - 外传之SQL Profile(上)》 《一个执行计划异常变更的案例 - 外传之SQL Profile(下)》

    03
    领券