作者简介: 刘晨,网名bisal,Oracle 10g/11g OCM,并国内首批Oracle YEP成员, 博客:blog.itpub.net/bisal 案例介绍 今天快下班的时候,几位兄弟来聊一
最近单位搬家,从国家会议中心,搬往空气清新的顺义后沙峪,搬迁之前的完结上线中,碰见了一些棘手的问题,有一些值得借鉴的地方。
上一篇文章《一个执行计划异常变更的案例 - 前传》(http://blog.csdn.net/bisal/article/details/53750586),介绍了一次执行计划异常变更的案例现象,这两天经过运行同事,以及罗大师的介绍,基本了解了其中的原因和处理方法,这个案例其实比较典型,涉及的知识点很多,有数据库新特性,有SQL相关的,还有应用数据质量问题,对于大师来说,是信手拈来的一次问题排查和处理,但至少对我这个仍旧艰难前行的初学者来说,值得回味的地方很丰富,所以有必要针对其中涉及的知识点做一下梳理,其中一些知识我之前了解的并不全面和深入,就自身来讲,整理学习一次,也是对自己的锻炼。
在上一篇《Server层表级别对象字典表 | 全方位认识 information_schema》中,我们详细介绍了information_schema系统库的表级别对象字典表,本期我们将为大家带来系列第四篇《Server层混杂信息字典表 | 全方位认识 information_schema》,下面请跟随我们一起开始information_schema系统库的系统学习之旅吧。
使用Oracle数据库的应用系统,有时出现SQL性能突然变差,特别是对于OLTP类型系统执行频繁的核心SQL,如果出现性能问题,通常会影响整个数据库的性能,进而影响整个系统的正常运行。这是常常遇到的问题,也是一些DBA的挑战。 SQL性能变差原因分析 SQL的性能变差,通常是在SQL语句重新进行了解析,解析时使用了错误的执行计划出现的。 下列情况是SQL会重新解析的原因: SQL语句没有使用绑定变量,这样SQL每次执行都要解析。 SQL长时间没有执行,被刷出SHARED POOL,再次执行时需要重新解析。
我们在用hive取数的时候,有的时候只是跑一个简单的join语句,但是却跑了很长的时间,有的时候我们会觉得是集群资源不够导致的,但是很大情况下就是出现了"数据倾斜"的情况。
今天快下班的时候,几位兄弟来聊一个问题,大致是昨天应用使用的数据库突然出现性能问题,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语句执行计划发生了变化,从数据库层面做了一些操作后,问题解决,目前尚不知晓做了什么具体的操作。
主机变量是将文字值传入或传出嵌入式SQL的局部变量。 最常见的是,主机变量用于将本地变量的值作为输入值传递给Embedded SQL,或者将SQL查询结果值作为输出主机变量传递给Embedded SQL查询。
不知不觉中,performance_schema系列快要接近尾声了,今天将带领大家一起踏上系列第六篇的征程(全系共7个篇章),在这一期里,我们将为大家全面讲解performance_schema中的复制状态与变量统计表。下面,请跟随我们一起开始performance_schema系统的学习之旅吧~
自适应游标共享Adaptive Cursor Sharing或扩展的游标共享(Extended Cursor Sharing)是Oracle 11g的新特性之一,主要用于解决以前版 本中由于绑定变量窥探导致SQL语句无法获得最佳执行计划的缺陷,即能够对效率低下的游标(子游标)进行自动识别而选择最佳的执行计划。本 文详细描述了自适应游标共享并给出示例。 有关绑定变量窥探请参考:Oracle 绑定变量窥探
针对”所有”客户端”所有”时刻。 基本语法: set global {变量名} = {新变量值}; 或者 set @@global.{变量名} = {新变量值};
今天查看awr报告的时候,发现一条sql语句异常。 Elapsed Time (s) Executions Elapsed Time per Exec (s) %Total %CPU %IO SQL Id SQL Module SQL Text 6,621.0523,310.522.3510.0993.140cdthzpx2jn4qJDBC Thin ClientSELECT MEMO_ID FROM MEMO W... sql语句很简单。 SELECT MEMO_ID FROM MO1_MEMO WH
在MySQL/MariaDB中有好几种变量类型:用户自定义变量、系统变量、一般的临时变量(即本地变量,或称为局部变量)。
SQLServer变量对应内存中的一个存储空间。它和常量不同,变量的值可以在执行过程中改变。
前段时间,有客户在网上看到了我们边缘计算模块产品,找到了我们,跟我们描述了他们目前遇到的问题:
在MySQL数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间结果数据,或者输出最终的结果数据
本文作者系流浪的金鱼(花名),甲骨文数据库工程师。个人主页:https://blog.csdn.net/rishairu1,经其本人授权发布。
本节描述MySQL何时可以使用索引来满足ORDER BY子句,当不能使用索引时使用filesort,以及优化器中有关ORDER BY的执行计划信息。
📦个人主页:楠慧 🏆简介:一个大二的科班出身的,主要研究Java后端开发 ⏰座右铭:成功之前我们要做应该做的事情,成功之后才能做我们喜欢的事 💕 过客的你,可以给博主留下一个小小的关注吗?这是给博主最大的支持。以后博主会更新大量的优质的作品!!!! 一、MySQL存储过程和函数 1.存储过程和函数的概念 存储过程和函数是 事先经过编译并存储在数据库中的一段 SQL 语句的集合 2.存储过程和函数的好处 存储过程和函数可以重复使用,减轻开发人员的工作量。类似于java中方法可以多次调用 减少网络流量,
MySQL除了使用日志对系统进行监视,还可以查看状态变量来监视系统。大部分的变量值以计数器的形式记录发生时间或者事件的数量。系统变量的范围包括全局(GLOBAL)和会话范围(SESSION或LOCAL)默认为会话范围。注意,一些变量仅具有全局范围,无论使用哪个关键字都返回相同的值。
这篇外传之前有这么几篇文章: 《一个执行计划异常变更的案例 - 前传》 《一个执行计划异常变更的案例 - 外传之绑定变量窥探》
在嵌入式SQL应用程序中,FETCH语句从游标检索数据。 所需的操作顺序是:DECLARE、OPEN、FETCH、CLOSE。 在未打开的游标上尝试FETCH会导致SQLCODE -102错误。
在 MySQL 数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间结果数据,或者输出最终的结果数据。
DECLARE: 申明变量。可以申明时直接可以赋值,使用set和select对变量进行赋值。申明的变量用于sql中的传参或是中间的存储使用(作用等同于JAVA程序中的变量)。注意:声明时需要指定变量的类型。
注: 以下测试案例所用的表均来自与scott方案,使用前,请确保该用户解锁. 1、简介 和大多数编程语言一样,在编写PL/SQL程序时,可以定义常量和变量,在pl/sql程序中包括有: a、标量类型(Scalar) b、复合类型(Composite) c、参照类型(Refrence) d、lob(large object)类型 下面来一一介绍 2、标量(Scalar)类型 只能存放单个值的变量 在编写pl/sql语句时,如果需要用到变量,那么就需要在定义部分定义变量。pl/sql中定义变量个常量
线程组-添加-配置元件-JDBC Connection Configuration
SELECT COUNT( * ) FROM TABLE 是个再常见不过的 SQL 需求了。
文章目录 一、MySQL存储过程和函数 1.存储过程和函数的概念 2.存储过程和函数的好处 3.存储过程和函数的区别 4.创建存储过程 5.调用存储过程 6.查看存储过程 7.删除存储过程 8.存储过程语法 8.1存储过程语法介绍 8.2变量的使用 8.3if语句的使用 8.4参数的传递 8.5case语句的使用 8.6while循环 8.7repeat循环 8.8loop循环 8.9游标 9.存储过程的总结 10.存储函数 一、MySQL存储过程和函数 1.存储过程和函数的概念 存储过程和函数是 事先经过
单引号(’): 在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)
不需要插件实现织梦会员增加签到积分/金币方法,因为很多插件我们大家可能都不了解,有些也可以增加了脚本,所以自己手动添加的比较安全,现在把方法分享给大家。
LAST_IDENTITY函数返回%ROWID局部变量值。在嵌入式SQL或ODBC中将%ROWID局部变量设置为一个值。动态SQL、SQL Shell或管理门户SQL界面未将%ROWID局部变量设置为值。动态SQL改为设置%ROWID对象属性。
INTO子句和主机变量仅在嵌入式SQL中使用。它们不在动态SQL中使用。在动态SQL中,%SQL.Statement类为输出变量提供了类似的功能。在通过ODBC、JDBC或动态SQL处理的SELECT查询中指定INTO子句会导致SQLCODE-422错误。
select @user2 = Name from ST_User where ID=1
含义: 一组预先编译好的sql语句的集合,理解成批处理语句 好处: 1、提高代码的重用性 2、简化操作 3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
前文回顾: 一个执行计划异常变更的案例(上) 上篇文章我们说了,绑定变量实际是一些占位符,可以让仅查询条件不同的SQL语句可以重用解析树和执行计划,避免硬解析。绑定变量窥探则是第一次执行SQL硬解析时,会窥探使用的绑定变量值,根据该值的分布特征,选择更合适的执行计划, 其缺点在于如果绑定变量列值分布不均匀,由于只有第一次硬解析才会窥探,所以可能接下来的SQL执行会选择错误的执行计划。 有时可能我们需要查看某条SQL使用了什么绑定变量值,导致执行计划未用我们认为最佳的一种。 方法一:10046 使用level
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*只选择索引列,则使用索引并避免排序。
之前的几篇文章: 《一个执行计划异常变更的案例 - 前传》 《一个执行计划异常变更的案例 - 外传之绑定变量窥探》 《一个执行计划异常变更的案例 - 外传之查看绑定变量值的几种方法》 《一个执行计划异常变更的案例 - 外传之rolling invalidation》 《一个执行计划异常变更的案例 - 外传之聚簇因子(Clustering Factor)》 《一个执行计划异常变更的案例 - 外传之查询执行计划的几种方法》 《一个执行计划异常变更的案例 - 外传之AWR》 《一个执行计划异常变更的案例 - 外传之ASH》 《一个执行计划异常变更的案例 - 外传之SQL AWR》 《一个执行计划异常变更的案例 - 外传之直方图》 《一个执行计划异常变更的案例 - 外传之SQL Profile(上)》 《一个执行计划异常变更的案例 - 外传之SQL Profile(下)》
“SELECT COUNT( * ) FROM TABLE” 是个再常见不过的 SQL 需求了。在 MySQL 的使用规范中,我们一般使用事务引擎 InnoDB 作为(一般业务)表的存储引擎,在此前提下,COUNT( * )操作的时间复杂度为 O(N),其中 N 为表的行数。
说明:IN 表示输入参数,OUT表示输出参数,比如存储返回值的变量,IN OUT 表示输入输出参数(注:都不区分大小写)
以下局部变量在嵌入式SQL中具有特殊用途。这些局部变量名称区分大小写。在过程启动时,这些变量是不确定的。它们由嵌入式SQL操作设置。也可以使用SET命令直接设置它们,或使用NEW命令将其重置为未定义。像任何局部变量一样,值将在过程持续期间或直到设置为另一个值或使用NEW进行定义之前一直存在。例如,某些成功的嵌入式SQL操作未设置%ROWID。执行这些操作后,%ROWID是未定义的或保持设置为其先前值。
在MySQL数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间结果数据,或者输出最终的结果数据。
今天开发的同事问我一个问题,说有一个sql语句,在weblogic的日志中执行没有结果,但是手动拷贝数据到客户端执行,却能够查到。这种奇怪的问题一下子就能引起我的好奇心,从我知道的原因来看啊,可能是存在不可见字符造成的。 对于不可见字符的问题,有必要先说明一下,可以简单举个例子。 我们创建一个表,然后插入的数据含有不可见字符,比如回车,换行符。 SQL> create table test as select object_id,object_name||chr(10) objname from all
当我们需要找到某条使用绑定变量的SQL语句中具体用到的参数值时,通常会使用v$sql_bind_capture视图,如果是字符串类型的变量,直接检索即可,
领取专属 10元无门槛券
手把手带您无忧上云