日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Oracle 数据库之最:你见过最高的 SQL Version 是多少?

發布時間:2023/11/29 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle 数据库之最:你见过最高的 SQL Version 是多少? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Oracle數據庫中執行的SQL,很多時候會因為種種原因產生多個不同的執行版本,一個游標的版本過多很容易引起數據庫的性能問題,甚至故障。

有時候一個SQL的版本數量可能多達數萬個,以下是我之前在"云和恩墨大講堂”分享過的一個案例。這個報告中的 SQL,最高達到了26萬個 SQL 版本。算是我見過的“之最”之一。

產生SQL多版本的原因很多,通過如下的一些測試我們可以稍微來看看如何分析和找到可能的原因。

以下作為一個基礎測試數據,一條基本的SQL查詢:


create table t1(c1 int, c2 nvarchar2(100));
alter system flush shared_pool;
var b1 number;
var b2 varchar2(10);
exec :b1 := 1;
exec :b2 := '0';
select /* test */ * from t1 where c1 = :b1 and c2 = :b2 order by c2;


如果我們修改了優化器參數、環境變量、綁定變量等,都可能使得SQL發生重新解析,產生不同的子游標,也就是不同的VERSION。

Rem 這里我們修改了NLS_SORT參數,
Rem 再來查看SQL的游標數。

SQL> alter session set nls_sort = 'SCHINESE_RADICAL_M';Session altered.

REM 注意,以上第一個Child就是因為
REM 語言不匹配產生的(LANGUAGE_MISMATCH)

REM 以下修改了優化器模式,
REM 又一個新的子游標將會因此而產生。

REM 可以看到,第二個子游標是因為優化器
REM 模式不匹配產生的,OPTIMIZER_MODE_MISMATCH.

REM 以下步驟,我們綁定了不同長度的綁定變量,
REM 由此又可能產生新的SQL版本。

REM 我們看到的第三個子游標就是
REM 因為綁定變量長度不同而產生的。


從Oracle 9i開始,Oracle對中文語言方式(Simplified Chinese和Traditional Chinese)提供了多種排序方式。主要由以下四種,大家可以進行修改嘗試:

SCHINESE_RADICAL_M ??針對簡體中文,按照部首(第一順序)、筆劃(第二順序)排序
SCHINESE_STROKE_M ? ?針對簡體中文,按照筆劃(第一順序)、部首(第二順序)排序
SCHINESE_PINYIN_M ? ? ??針對簡體中文,按照拼音排序
TCHINESE_RADICAL_M ? ?針對繁體中文,按照部首(第一順序)、筆劃(第二順序)排序
TCHINESE_STROKE_M ? ??針對繁體中文,按照筆劃(第一順序)、部首(第二順序)排序

當然可以逐一嘗試:

以上測試是基于11.2.0.3版本,在Oracle 12c中,相關的可能因素已經多達64個,參考官方手冊可以了解?V$SQL_SHARED_CURSOR?的更詳細信息。


本文出自數據和云公眾號,原文鏈接


總結

以上是生活随笔為你收集整理的Oracle 数据库之最:你见过最高的 SQL Version 是多少?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。