有个纠结的问题

[复制链接]
11#
 楼主| 发表于 2017-12-13 21:14 | 只看该作者
richto 发表于 2017-12-13 20:02
Oracle cannot find the best one within a second.  So, my tool can help Oracle to find the best one ...

我说你那一大堆英文干嘛用,原来是工具,先mark

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
12#
发表于 2017-12-13 22:31 | 只看该作者
richto 发表于 2017-12-13 20:02
Oracle cannot find the best one within a second.  So, my tool can help Oracle to find the best one ...

你这是啥意思?ORACLE早就能互相转化了。
这里有个简单例子:

CREATE TABLE T1 AS SELECT LEVEL ID,TRUNC(LEVEL/10) VAL FROM DUAL CONNECT BY LEVEL<=1000;
CREATE TABLE T2 AS SELECT LEVEL ID,TRUNC(LEVEL/10) VAL FROM DUAL CONNECT BY LEVEL<=1000;

CREATE INDEX T1X ON T1(ID);
CREATE INDEX T2X ON T2(ID);

EXEC DBMS_STATS.GATHER_TABLE_STATS(USER,'T1',CASCADE=>TRUE);
EXEC DBMS_STATS.GATHER_TABLE_STATS(USER,'T2',CASCADE=>TRUE);

SELECT * FROM T1 WHERE T1.ID=10 AND T1.VAL IN (SELECT ID FROM T2);

SELECT * FROM T1 WHERE T1.ID=10 AND EXISTS (SELECT 1 FROM T2 WHERE T2.ID=T1.VAL);

这两种写法都是同一个SEMI JOIN的计划:

Execution Plan
----------------------------------------------------------
Plan hash value: 1522014429

---------------------------------------------------------------------------------------------
| Id  | Operation                            | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                     |      |     1 |    11 |     3   (0)| 00:00:01 |
|   1 |  NESTED LOOPS SEMI                   |      |     1 |    11 |     3   (0)| 00:00:01 |
|   2 |   TABLE ACCESS BY INDEX ROWID BATCHED| T1   |     1 |     7 |     2   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN                  | T1X  |     1 |       |     1   (0)| 00:00:01 |
|*  4 |   INDEX RANGE SCAN                   | T2X  |  1000 |  4000 |     1   (0)| 00:00:01 |
---------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - access("T1"."ID"=10)
   4 - access("T1"."VAL"="ID")
   

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
13#
发表于 2017-12-13 22:34 | 只看该作者
richto 发表于 2017-12-13 20:08
Yes, I am the Inventor of Lecco SQL expert , Quest SQL Optimizer.  Now, I invent a new product cal ...

厉害,你来介绍一下自己产品用了什么先进技术,比起其他工具有什么优势?

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
14#
发表于 2017-12-13 22:40 | 只看该作者
richto 发表于 2017-12-13 20:08
Yes, I am the Inventor of Lecco SQL expert , Quest SQL Optimizer.  Now, I invent a new product cal ...

我看了一下页面,似乎是自动穷尽所有HINTS的组合,然后选择最优的一种。
但是SQL执行是很耗时间的,如果不执行,你又如何判定各种HINTS的好坏呢?这和ORACLE自己的SPM有什么不同?
调优结果是如何呈现的?是生成BASE LINE? 如果以后SQL有修改,比如增加一个SELECT 列,原来的调优结果还在吗?

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
15#
发表于 2017-12-13 22:46 | 只看该作者

杜先生是行业前辈:

http://www.tudou.com/programs/view/vgvGLPQhhQM/

独家视频专访:戴尔集团SQL优化技术专家和首席技术专家杜伟业第106期

嘉宾姓名:杜伟业
社区ID:richto
Richard To (杜伟业) 目前是戴尔软件集团的SQL优化技术专家,是Dell SQL Optimizer的发明者和首席技术专家。在利用人工智能解决数据库性能问题领域有20多年的经验。
【本期看点】
作为戴尔集团SQL优化器首席技术专家,杜伟业拥有二十多年的DBA经验,他是拿了无数奖项的SQL Optimizer的发明者。在诸多采访中,小编发觉一个有趣的现象。越是大师级的技术专家,言语越发谦卑。杜总跟小编甚至聊起来了家常,比如他在台湾读的物理专业,后来去美国读的计算机硕士,最后在香港工作,在Leccotech工作期间发明了SQL Expert,然后公司卖给了Quest,同时SQL Expert更名为SQL Optimizer。Quest公司的Jim McDaniel发明了Toad,后来Quest又被戴...查看详情

使用道具 举报

回复
论坛徽章:
20
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:58马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:58
16#
发表于 2017-12-13 23:07 | 只看该作者
newkid 发表于 2017-12-13 22:31
你这是啥意思?ORACLE早就能互相转化了。
这里有个简单例子:

Yes, Oracle SQL optimizer can do SQL rewrite internally such as:
SQL --> SQL'  --> Plan1,Plan2,Plan3,.... Planx
The SQL' is the internal rewrite result, for example, rewrite Exist or In to Join(if it is possible). The power of Oracle internal rewrite ability is getting strong . The problem is the selection of the best plan from Plan1,Plan2,Plan... Planx. It is impossible for Oracle to find the best plan out hundreds or even thousands Plans within a short time. So, my product uses AI algorithm to extract those hidden plans. Test run those plans, you will get the best plan for your SQL in your specific environment.

使用道具 举报

回复
论坛徽章:
20
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:58马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:58
17#
发表于 2017-12-13 23:10 | 只看该作者
本帖最后由 richto 于 2017-12-13 23:16 编辑
newkid 发表于 2017-12-13 22:40
我看了一下页面,似乎是自动穷尽所有HINTS的组合,然后选择最优的一种。
但是SQL执行是很耗时间的,如果 ...

There are more than 100 hints in Oracle manual, if you pick only 3 out hundred, there will be close 1,000,000 premutations for one SQL, so we have to do something special to handle this problem.Yes, we have to test run those SQL to find the best one. But, it is off line execution. You can do after peak hours.
In this version, we provide Hints only. SQL Plan Baseline and SQL Translator may be provided in future.

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
18#
发表于 2017-12-13 23:15 | 只看该作者
richto 发表于 2017-12-13 23:07
Yes, Oracle SQL optimizer can do SQL rewrite internally such as:
SQL --> SQL'  --> Plan1,Plan2,Pl ...

ORACLE基于它自己的成本算法来评估计划,有时候会有偏差。
我们现在经常碰到的问题是中间结果集的CARDINALITY偏差,特别是有多个列的连接,在没有创建列群组的情况下,估计值经常少于实际值,因为ORACLE不知道列数据之间的相关性。请问你的AI又是如何做到的呢,假如没有统计数据的支持?

使用道具 举报

回复
论坛徽章:
20
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-02-13 15:10:58马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:58
19#
发表于 2017-12-13 23:20 | 只看该作者
本帖最后由 richto 于 2017-12-13 23:21 编辑
newkid 发表于 2017-12-13 23:15
ORACLE基于它自己的成本算法来评估计划,有时候会有偏差。
我们现在经常碰到的问题是中间结果集的CARDIN ...

Actual test run those alternatives SQL is the best way to tell which plan is the best.
It is like human manual SQL tuning, you may rewrite your SQL to other SQL syntax and than test run it. But now it can be done by a machine.

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
20#
发表于 2017-12-13 23:25 | 只看该作者
richto 发表于 2017-12-13 23:20
Actual test run those alternatives SQL is the best way to tell which plan is the best.
It is like ...

是的,但是有的SQL跑一下都要几十分钟,所以硬解析期间是不可能一一尝试的。ORACLE自己也做出一些努力比如CARDINALITY FEEDBACK, ADAPTIVE PLAN, 它自带的SQL PLAN MANAGEMENT也会在后台尝试各种不同的计划。你的工具可以在短时间内做到这些吗?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表