首頁 資料庫 mysql教程 Oracle调优专家秘籍

Oracle调优专家秘籍

Jun 07, 2016 pm 05:07 PM
oracle資料庫

第二:SQL的优化永远只针对大表之间的连接才用得上。不要怀疑,首先,我说的大表是指包含大表,不管是大表与大表,还是大表与小表

注:本文不是给你一个案例,而是讲调优的方法,古人云:授人鱼不如授人渔,这里要讲的,就是教你怎么捕鱼。

这里要说的sql调优很有意思,得先从感恩节说起。

感恩节(英语:Thanksgiving Day)是美国和加拿大共有的节日,由美国人民独创,原意是为了感谢上天赐予的好收成。11月的第四个星期四是感恩节。感恩节是美国人民独创的一个古老节日,也是美国人合家欢聚的节日,因此美国人提起感恩节总是备感亲切。感恩节是美国国定假日中最地道、最美国式的节日。

感恩节之后的第一天,是星期五,在这一天,美国人有疯狂购物的习惯,所以被称之为黑色星期五,近来己经由传统的商场购物改为网上购物,所以我的愕运便由此而生,我的DB便在这一天被疯狂购物给访问爆了。

客户提供了一份高峰时段的AWR报告,仔细分析后,发现竟然是一条高耗CPU的SQL给整跨了,仅仅一条,占了85%的CPU,这才深入去了解了SQL的优化,以前也做过DB的一些优化,基本上通过分析表、建索引、调参数、打PATCH等等都能解决,但这次,持续了一周,学了几天,还没解决。最终决定潜心研究SQL的优化,得出以下几点关于优化的结论:

第 一:1/9原则,引用Oracle大牛Tom大师的原话:数据库中90%的性能问题都可以由调整10%的SQL语句来解决。

Tom say: Sql tuning constitute a good 90 percent or more of the effort. Thats right; before we even get the DBAs involved, we the developers have done 90 percent of  the work. This is why I think most people do not understand database tuning.

第二:SQL的优化永远只针对大表之间的连接才用得上。不要怀疑,,首先,我说的大表是指包含大表,不管是大表与大表,还是大表与小表,只要是有大表就行,因为小表与小表之间不会出现性能问题;其次:有连接才有优化的价值,我真的不知道单表的SQL有什么优化可言,对单表查询无非是三点:全表/索引/分区表,这三点,你肯定会。

第 三:说第三条之间,先说明:正如前面两条所言,数据库90%的优化在SQL,SQL的优化关键在“大表连接”,所以下面说的SQL优化都是指大表连接。

SQL的执行中,Oracle提供的执行计划,不是什么神秘的东西,其实就是oracle去表中查找我们所需结果的一个算法,算法这东西太熟了,在大学《数据结构》这门课中就学过(惭愧,这堂课从来都是去睡觉,因为当时根本不知道那位老朽在说什么),算法就是运算过程,在这里,就是指查找路径,说白了:执行计划=算法=查找路径,要找最优的执行计划,就是要找出最优算法,最优算法熟吧? 不熟我跟你说几个名词:"冒泡算法",“折中算法”,“快速查找”,去过软件公司面试的人很多人肯定都做过这种题。而Oracle提供的执行计划中,恰恰就提供这些详细的过程在里面。你能看到Oracle先去哪个表/索引拿数据、根据什么条件拿多少行,再把拿到的结果去连接哪个表、等等,经过一系列的运算,最后得出什么结果给你。

但是,ORACLE也是一款软件,不是神,你给它一条SQL,它在开始运算之前,是不知道哪种算法是最优的,不可能每个都试一遍,再做比较吧,而且每条语句的执行计划上百种,每条语句都执行上百次,那服务器干脆别活了。所以,它只能预估一种针对这条SQL认为最优的算法,然后去执行。请注意:

1.永远没有最优算法,如果有最优算法a,那优化还需要做吗?每次都按最优算法a做行了。

2. Oracle认为最优的算法也不一定是最优算法,如果是的话,我们还需要做吗?

说到这里:我们就明白了,ORACLE调优的90%=SQL调优=大表连接调优=执行计划调优=算法调优,而大表连接就2点:1.连接顺序。2.连接算法(嵌套/哈希/合并)。

结论:SQL的调优就是手动设计出最优连接顺序和算法的执行计划。

linux

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1273
29
C# 教程
1256
24
oracle怎麼查看表屬於哪個表空間 oracle怎麼查看表屬於哪個表空間 Jul 06, 2023 pm 01:31 PM

oracle查看表屬於哪個表空間的方法:1、使用「SELECT」語句,並透過指定表名來查找指定表所屬的表空間;2、使用Oracle提供的資料庫管理工具來查看表所屬的表空間,這些工具通常提供了圖形介面,使得操作更加直覺和方便;3、在SQL*Plus中,可以透過輸入「DESCRIBEyour_table_name;」命令來查看表所屬的表空間。

如何使用PDO連線到Oracle資料庫 如何使用PDO連線到Oracle資料庫 Jul 28, 2023 pm 12:48 PM

如何使用PDO連接到Oracle資料庫概述:PDO(PHPDataObjects)是PHP中一個操作資料庫的擴充庫,它提供了一個統一的API來存取多種類型的資料庫。在本文中,我們將討論如何使用PDO連接到Oracle資料庫,並執行一些常見的資料庫操作。步驟:安裝Oracle資料庫驅動擴充功能在使用PDO連接Oracle資料庫之前,我們需要安裝對應的Oracl

oracle如何只取一條重複的數據 oracle如何只取一條重複的數據 Jul 06, 2023 am 11:45 AM

oracle只取一條重複的數據的步驟:1、使用SELECT語句結合GROUP BY和HAVING子句來查找重複數據;2、使用ROWID刪除重複數據,可以確保刪除的是精確的重複數據記錄,或者使用「ROW_NUMBER ()」函數刪除重複數據,這將刪除每組重複資料中的除了第一筆記錄之外的其他記錄;3、使用「select count(*) from」語句傳回刪除記錄數確保結果。

如何使用php擴充PDO連接Oracle資料庫 如何使用php擴充PDO連接Oracle資料庫 Jul 29, 2023 pm 07:21 PM

如何使用PHP擴充PDO連接Oracle資料庫導語:PHP是一種非常流行的伺服器端程式語言,而Oracle是一款常用的關係型資料庫管理系統。本文將介紹如何使用PHP擴充PDO(PHPDataObjects)來連接Oracle資料庫。一、安裝PDO_OCI擴充要連接Oracle資料庫,首先需要安裝PDO_OCI擴充。以下是安裝PDO_OCI擴充的步驟:確保

實現PHP和Oracle資料庫的資料導入 實現PHP和Oracle資料庫的資料導入 Jul 12, 2023 pm 06:46 PM

實作PHP和Oracle資料庫的資料匯入在Web開發中,使用PHP作為伺服器端腳本語言可以方便地操作資料庫。 Oracle資料庫作為一種常見的關聯式資料庫管理系統,具備強大的資料儲存與處理能力。本文將介紹如何使用PHP將資料匯入Oracle資料庫中,並給出對應的程式碼範例。首先,我們需要確保已經安裝了PHP和Oracle資料庫,並且已經配置了PHP對Orac

oracle如何查詢表空間大小 oracle如何查詢表空間大小 Jul 06, 2023 pm 01:45 PM

oracle查詢表空間大小步驟:1.使用資料庫管理員帳號登入Oracle資料庫;2、使用「SELECT」語句來查看空間清單;3、查詢表空間大小有3種方法:使用dbms_utility包查詢、使用dba_segments視圖查詢、使用dba_data_files檢視查詢;4、使用「DBMS_OUTPUT.PUT_LINE」函數或其他顯示結果的方法來顯示查詢結果。

oracle資料庫需要jdk嗎 oracle資料庫需要jdk嗎 Jun 05, 2023 pm 05:06 PM

oracle資料庫需要jdk,原因是:1、使用特定的軟體或功能時需要包含在JDK中的其他軟體或函式庫;2、需要安裝Java JDK才能在Oracle資料庫中執行Java程式;3、JDK提供了開發和編譯Java應用程式的功能;4、滿足Oracle對Java函數的要求,以幫助實現和實現特定功能。

如何有效率地使用PHP和Oracle資料庫的連線池 如何有效率地使用PHP和Oracle資料庫的連線池 Jul 12, 2023 am 10:07 AM

如何有效率地使用PHP和Oracle資料庫的連接池引言:在開發PHP應用程式時,使用資料庫是不可或缺的一部分。而在與Oracle資料庫互動時,連接池的使用對於提高應用程式的效能和效率至關重要。本文將介紹如何在PHP中有效地使用Oracle資料庫連接池,並提供對應的程式碼範例。一、連接池的概念及優勢連接池是一種管理資料庫連接的技術,它透過事先創建一批連接並維護一個

See all articles