自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

落落的专栏 专注SQL调优 性能调优

Focus on SQL Tuning, Oracle MySQL Performance tuning 想精通SQL以及SQL优化?联系微信692162374

  • 博客(236)
  • 收藏
  • 关注

原创 徒弟涨工资排行榜

这个是徒弟张工资了,和我聊天,

2020-10-14 23:05:41 13887 4

原创 SQL改写的书终于出版了

众所周知,SQL 优化很多 SQL 都是写法上有问题,目前市面上没有这种书籍,为了造福广大Oracle使用者教主和我特意编写 SQL 改写 优化的书籍 ,大家可以到这里购买http://product.china-pub.com/4455744#mlSQL水平比较菜的兄弟们也可以购买运维同志们也可以购买

2020-05-11 09:54:51 9439 8

原创 SQL优化新书《SQL优化核心思想》终于出版了

耗时三年,SQL优化大作终于出版了,有想提升SQL优化水平的同学,可以买本看看本书共10章内容:第一章介绍SQL优化的基础知识;第二章讲解统计信息相关内容;第三章讲解执行计划,快速找出SQL性能瓶颈;第四章讲解常见的访问路径;第五章讲解表的各种连接方式;第六章介绍单表访问以及索引扫描的成本计算,引出优化思想。第七章讲解查询变换;第八章讲解优化技巧;第九章分享经典案例;第十章介绍全自动SQL审核...

2020-05-11 09:54:16 12287 21

原创 CPU对数据库的性能影响

设置了参数alter system set "_serial_direct_read"=never;intel e5-2667 v4 1.58秒,这颗CPU和E5-2697 v3都是垃圾佬比较关注的CPU。为了避免物理IO的影响,多次反复运行,确保test01全部缓存在buffer cache中。我拿消费级CPU对比服务器CPU是有问题的,毕竟消费级CPU主频比服务器CPU高接近1倍了。从上面的测试结果可以看到,CPU对数据库的影响非常巨大,特别是有跑批业务的情况。最近做了个CPU性能测试,测试语句如下。

2024-02-05 23:39:14 359 1

原创 利用业务逻辑+OB分布式特性优化SQL

Oceanbase优化经典案例:利用业务逻辑+OB分布式特性优化SQL

2023-03-09 16:45:41 1254 1

原创 SELECT后面有自定义函数的优化方法

SELECT后面有自定义函数的优化方法

2022-12-06 19:36:01 989

原创 利用ORDERED_PREDICATES优化多个自定函数作为WHERE过滤条件

利用ORDERED_PREDICATES优化多个自定函数作为WHERE过滤条件

2022-11-18 16:06:23 634 1

原创 where条件中有权限校验的自定义函数优化方法

where条件中有权限校验的自定义函数优化方法

2022-10-20 11:25:46 383 1

原创 Oracle19c中SQL分开跑很快UNION ALL之后变慢分析

SQL分开跑很快,UNION ALL之后变慢

2022-10-11 20:19:20 3456

原创 SQL优化案例之exists中套or not exists

一个SQL带你了解SQL等价改写各种姿势

2022-10-04 21:01:41 1102

原创 SQL优化案例之where exists(col1=xxx or col2=xxx)等价改写

SQL优化案例之where exists(col1=xxx or col2=xxx)等价改写

2022-09-23 15:33:23 1273

原创 今年一直搞Oracle EBS优化,脑壳痛

搞了10几年的性能优化,OLTP系统,OLAP系统,Oracle,MYSQL,PG,Greenplum,Oceanbase,hive,达梦等等各种数据库优化项目做过太多太多...唯独EBS系统没有单独做过优化,一直都很遗憾。虽然之前做网络培训的时候教了几个EBS DBA徒弟,他们也找我优化过EBS的SQL,但是都是零零散散的。今年开春,公司接了一个EBS优化项目(版本ebs11i),这也算公司是第一个真正意义的EBS优化项目。早期是3个DBA和3个EBS顾问以及项目经理在客户现场,搞了2个多月,进展

2021-10-21 02:32:56 3287 5

原创 利用分析函数减少对表访问次数

最近在给一银行客户优化数据仓库,发现了很多烂SQL下面这条SQL有很好的教学作用,现拿来与大家分享SQL语句如下:select /*+ parallel(16) */ count(*) from (SELECT HM, DZ, YB, ZZDH, ZJLX, ZJHM, JGBM, Z

2021-09-01 22:15:29 749 1

原创 PostgreSQL对or exists产生的filter优化二

PostgreSQL会对or exists产生的filter进行优化,上一篇文章没有测试exists中有大表的情况,今天来测试一下exists中有大表的情况注意:测试期间没有对表添加索引create table a as select * from dba_objects;create table b as select * from a;create table c as select * from a;create table d as select * from a;insert i

2021-07-20 16:38:13 808 2

原创 PostgreSQL对or exists产生的filter优化一

在Oracle数据库中,where条件中有or exists子查询会走Filter,这种情况一般都需要改写SQL

2021-07-19 12:12:29 1187 4

原创 利用Python将Oracle表中的数据抽到PostgreSQL

import cx_Oracleimport psycopg2import osimport timefrom io import StringIOimport pandas as pd#说明:本脚本用于将Oracle数据迁移到PG#注意:源表与目标表字段数量必须一致os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8' #设置字符集为UTF8,防止中文乱码source_db = cx_Oracle.connect.

2021-05-21 22:40:45 873 1

原创 对自定义函数开启parallel_enable属性使函数可以并行来提升SQL查询性能

***人社系统最近做了数据迁移,采用国产的Zdata一体机替换了老旧的小型机,数据库也从11g升级为了19c之前整个系统被拆分为5套子系统,这次升级将5套子系统做了整合,采用pdb的方式将5套子系统统一存放在Zdata一体机中完成数据迁移之后,在没有针对SQL进行专门的优化的前提下,从各项指标上看,系统的整体性能提升了15-20倍虽然整个系统的性能有了巨大提升,但是我们觉得还不够,我们的目标是将性能提升100倍前几天对系统中一个老大难的SQL做了等价改写,SQL从每次执行5到10分钟降低为了15秒.

2021-01-17 21:54:44 1472 3

原创 通过一个例子详解 MySQL record lock(记录锁) 的加锁方式

本文基于MySQL8.0.19,下面通过一个例子讲解 MySQL record lock(记录锁) 的加锁方式SESSION1:mysql> SELECT VERSION();+-----------+| VERSION() |+-----------+| 8.0.19 |+-----------+1 row in set (0.01 sec)mysql> CREATE TABLE t(id INT UNSIGNED PRIMARY KEY ,NAME VARCH

2020-10-11 21:30:36 2161 4

原创 都2020年了还能看见奇葩的SQL写法

2020-08-17 13:08:51 1402 5

原创 A.COLUMN LIKE B.COLUMN% 关联的优化方法

现在有个SQL要跑10秒:SQL> select a0.id, 2 a1.room_no, 3 a1.user_name, 4 a1.user_no, 5 row_number() over(partition by a0.id order by a1.room_enter_time desc) as fn 6 from vid_attachment a0 7 inner join vid_room

2020-06-13 22:16:07 933 1

原创 MySQL8.0.19 MGR MySQL router MySQL connector failover 组合实现高可用

在MySQL5.7之前,本人一直是很排斥MySQL的,因为MySQL的半同步并不能100%保证主从数据一致性,MHA架构也不能100%保证主从数据一致性,一个连数据一致性都不能保证的数据库我肯定是不会像学Oracle那样化大量时间去学习。MySQL5.7 MGR技术的出现,MySQL8.0对分析函数的支持,对内连接等值访问HASH JOIN 算法的支持等等新特征,让我看到MySQL要脱胎换骨了,这也终于让我有兴趣学习MySQL了,今天先配置MySQL MGR 3节点单主模式的集群,然后利用MySQL rou

2020-06-05 20:10:35 1131

原创 利用Python多进程并行执行加快MySQL批量UPDATE执行速度

现在有个表tmysql> desc t;+----------------+--------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------------+--------------+------+-----+---------+----------------+| owner

2020-05-29 15:58:16 2607 2

原创 利用Python解析MySQL BINLOG从而回滚UPDATE和DELETE误操作

MySQL没有Oracle的闪回(flashback)功能,如果不小心执行了UPDATE或者DELETE误操作,想要回滚相比Oracle还是挺麻烦的可以利用mysqlbinlog工具解析binlog,从而拼接出UPDATE和DELETE的回滚语句,人工拼接比较麻烦,所以利用Python来拼接import ioimport pymysqldef processUPDATE(db_name,table_name): conn = pymysql.connect("192.168.56.10",

2020-05-24 23:38:09 1148

原创 Oracle中TX锁(行锁)监控,抓TX锁的源头

DBA小伙子,看到这个文章是不是很开心,解决了你一个大麻烦session 1: update emp_bak set ename='沙雕' where empno=7369;session 2: update emp_bak set ename='大长腿' where empno=7369;session 3: update emp_bak set ename='矮丑穷' where empno=7369;运行下面脚本可以抓到哪个SID,哪个SQL_ID,跑的SQL_TEXT锁住了哪个SID

2020-05-18 23:51:09 2187 2

原创 利用Python监控MySQL当前跑的TOP SESSION

利用ps命令抓出MySQL PID,根据PID再监控每个线程CPU使用率以及跑的SQL语句import pymysqlimport osimport timeos.environ['NLS_LANG']='SIMPLIFIED CHINESE_CHINA.UTF8'command="ps -ef | grep 3306 | grep -v grep | awk '{print $2}'"with os.popen(command, "r") as pid: pid = str(int(pi

2020-05-18 17:16:33 780

原创 利用Python监控Oracle当前跑的TOP SESSION

因为要使用Python经常连接到Oracle获取SQL_ID以及SQL语句,会话频繁连接,断开会引起Oracle服务器性能严重下降所以利用Python监控Oracle的时候,要先在Oracle配置连接池(DRCP)begin dbms_connection_pool.configure_pool(pool_name => 'sys_default_connection_pool', mi

2020-05-17 12:44:15 1539

原创 利用Python发送QQ邮件

发送QQ邮件之前,要先开启QQ邮箱IMAP/SMTP服务,并且记住授权码import smtplibfrom email.mime.text import MIMETextmail_sender='你的qq号@qq.com' #发送方邮箱mail_code='你的授权码' #授权码mail_receivers='你的qq号@qq.com' #邮件接收方subject='测试Python发邮件' #主题content='测试Pyt

2020-05-14 22:58:36 613

原创 利用Python将EXCEL,CSV,TSV导入Oracle或者MySQL

虽然可以用Kettle等ETL工具将EXCEL,CSV,TSV等格式的文件导入Oracle或者MySQL,但是还是觉得写点代码心里踏实些import cx_Oracleimport pymysqlimport pandasimport osimport timeos.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'target_db_type='MySQL'

2020-05-14 01:32:18 1576

原创 利用Python将数据库查询结果导出为EXCEL,CSV,TSV格式(性能比Kettle高接近1倍)

虽然可以用Kettle等ETL工具将数据库查询结果导出为CSV格式,但是感觉很麻烦,我们还是用Python来做吧import cx_Oracle #导入连接Oracle模块import os #导入os模块import csv #

2020-05-10 21:20:29 1972

原创 在Oracle和MySQL中利用SQL查询出今年日历

Oracle写法:select case when rank() over(partition by month order by week) = 1 then month else ' ' end month, max(一) 一, max(二) 二, max(三) 三, max(四) 四, max(五) 五, max(六) 六,

2020-05-10 01:32:32 905

原创 MySQL中的树形查询

树形查询本质就是递归算法(自己调用自己),Oracle很早就支持了树形查询MySQL中可以使用 WITH RECURSIVE 来实现树形查询比如在Oracle中scott账户下,找出员工编号为7369所有的上级:SQL> select empno, ename, job, mgr, level 2 from emp 3 start with empno = 7369 4 connect by empno = prior mgr; EMPNO ENAME

2020-05-09 00:00:24 1388

原创 MySQL根据主键切割大事务(变相ROWID切片)

不管是Oracle,MySQL,还是PostGre SQL,跑大事务都会严重影响数据库性能在Oracle里面可以利用rowid切片的方式处理大事务,如果不清楚什么是rowid切片,可以买一本《SQL优化核心思想》看看MySQL没有Oracle的区,块,段这些概念,所以也就不能使用rowid切片的方式处理大事务MySQL中表一般都是存在innodb引擎中的,使用innodb引擎每个表都必须要设置主键(当然了你也可以不设置主键,你屌)MySQL中主键一般都是自增(auto_increment)的

2020-05-08 22:17:20 1294 3

原创 获取MySQL中某个数据库下所有表建表语句的DDL

本脚本可以获取MySQL中某个数据库下所有表建表语句的DDL注意:本脚本需在MySQL8.0以上版本运行注意:本脚本不获取VIEW创建语句注意:本脚本没有处理主键,外键等约束注意:本脚本只处理非分区表,分区表请自己改写脚本注意:如果你做数据迁移,想把MySQL数据库迁移到其他数据库,自己改写脚本WITH tab AS (SELECT table_name FROM informa...

2020-05-07 10:51:07 4740

原创 Hadoop3.1.3单机版安装Hive3.1.2(Redhat8.0)

下载 Hive3.1.2并上传到 /tmp apache-hive-3.1.2-bin.tar.gz下载 MySQL驱动并上传到 /tmp mysql-connector-java-5.1.48.tar.gz安装MySQL8.0.19,在Redhat8.0上安装完MySQL8.0.19后,进入MySQL会报如下错误:[root@server ~]# mysql -uroot -p...

2020-05-06 13:00:04 1788 1

原创 在Redhat8.0上安装Hadoop3.1.3单机版

hadoop最新版本是3.2.1,安装之后SecondaryNameNode起不来 所以安装3.1.3hadoop下载地址:http://hadoop.apache.org/releases.html修改/etc/hosts,添加ip和hostnamevi /etc/hosts192.168.56.10 server注意:这里填写ip hostname 我的ip是 192....

2020-05-06 00:17:05 890

原创 利用Python脚本实现Oracle与MySQL之间数据迁移

虽然可以用kettle等ETL工具来做数据迁移,但是现在Python很流行,Python编码也特简单,所以就写个Python脚本来实现数据迁移import cx_Oracleimport osimport time#说明:本脚本可以将一台Oracle服务器的表迁移到另外一台Oracle服务器#注意:从Oracle迁移到Mysql或者从MySQL迁移到Oracle你们自己改一下conn...

2020-05-03 19:23:52 2357

原创 不要对date类型to_char

数据库环境Oracle12c一位运维DBA学员发来SQL优化请求,他说这是一个报表,要跑7分钟,开发天天被骂,请他优化他搞不定,把执行计划发给我,我瞄了一眼执行计划,发现有笛卡尔积,于是叫他禁止笛卡尔积禁止笛卡尔积之后,SQL还是要跑1分多钟,SQL语句和执行计划如下:select rownum,substr(to_char(t.ymd,'yyyymmdd'),5,2)||'月'||...

2020-04-30 21:45:13 1113 2

原创 抓出Oralce当前账户下所有表建表语句,迁移到MySQL

有时候需要导出当前Oracle账户下所有的表结构信息,在其他Oracle测试库重建,或者迁移到MySQL数据库中虽然可以用工具,但是本人还是习惯自己动手本脚本会将分区表处理为非分区表,如需添加分区信息,自己改脚本本脚本只支持number,char,varchar2,date,timestamp数据类型如需支持更多数据类型,自己修改脚本如需将Oracle数据类型转换为MySQL数据类型...

2020-04-28 23:47:22 537 1

原创 利用or改写union all

实体班一位学生最近要做SQL优化,发来一条SQL:select t.flowmeterno, t.flowmetername, t.cardno, nvl("2020-04-08(m³)", 0) + nvl("2020-04-09(m³)", 0) + nvl("2020-04-10(m³)", 0) + nvl("2020-...

2020-04-17 20:46:47 1531

原创 利用双表技术解决多列日期查询性能问题

一个数据库老兵(10几年数据库+数据仓库+大数据经验)遇到了这样一个难题:有个订单表有2个字段,一个是 order_date 订单日期,一个是 entry_date 入库日期,平时业务系统查询使用的是 order_date,表呢是根据order_date 按天分区,每天凌晨ETL工具会根据 entry_date 将昨天入库的数据抽到数据仓库,他抱怨抽数的过程非常慢,因为每天入库的订单有几百万到...

2020-03-25 12:16:50 903 4

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除