日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
創(chuàng)新互聯(lián)OceanBase教程:OceanBase執(zhí)行計(jì)劃緩存

執(zhí)行計(jì)劃緩存(Plan Cache)用于減少執(zhí)行計(jì)劃的生成次數(shù)。

OceanBase 數(shù)據(jù)庫會(huì)緩存之前生成的執(zhí)行計(jì)劃,以便在下次執(zhí)行該 SQL 時(shí)直接使用,可以避免反復(fù)執(zhí)行,從而優(yōu)化執(zhí)行過程,這種策略被稱為“Optimize Once”,即“一次優(yōu)化”。

計(jì)劃緩存是一個(gè)典型的 Key-Value 結(jié)構(gòu),Key 就是參數(shù)化后的 SQL 字符串,Value 就是該條 SQL 所對(duì)應(yīng)的執(zhí)行計(jì)劃。

每個(gè)租戶在每一臺(tái)服務(wù)器上都有一個(gè)獨(dú)立的計(jì)劃緩存,用以緩存在此服務(wù)器上處理過的 SQL 計(jì)劃。在 OceanBase 數(shù)據(jù)庫的計(jì)劃緩存中,SQL 的執(zhí)行計(jì)劃可以分為本地計(jì)劃、遠(yuǎn)程計(jì)劃和分布式計(jì)劃三種類型。在計(jì)劃緩存中,同一條 SQL 根據(jù)其需要訪問的數(shù)據(jù)不同,可能同時(shí)具有三種執(zhí)行計(jì)劃。

對(duì)于一條 SQL 的一種執(zhí)行計(jì)劃,OceanBase 數(shù)據(jù)庫默認(rèn)只會(huì)保留第一次執(zhí)行 SQL 時(shí)生成的計(jì)劃;但在某些情況下,同一條 SQL 的參數(shù)值可能會(huì)影響到執(zhí)行計(jì)劃的選擇,所以計(jì)劃緩存會(huì)根據(jù)需要,為不同的參數(shù)值保留不同的執(zhí)行計(jì)劃,從而保證每次執(zhí)行時(shí)可以使用最合適的計(jì)劃。

計(jì)劃緩存的淘汰

計(jì)劃緩存的淘汰是指將執(zhí)行計(jì)劃從計(jì)劃緩存中刪除,減少計(jì)劃緩存對(duì)內(nèi)存的使用。OceanBase 數(shù)據(jù)庫支持自動(dòng)淘汰和手動(dòng)淘汰兩種方式。

自動(dòng)淘汰

自動(dòng)淘汰是指當(dāng)計(jì)劃緩存占用的內(nèi)存達(dá)到了需要淘汰計(jì)劃的內(nèi)存上限(即淘汰計(jì)劃的高水位線)時(shí),對(duì)計(jì)劃緩存中的計(jì)劃執(zhí)行自動(dòng)淘汰。

  • 觸發(fā)執(zhí)行計(jì)劃淘汰的條件
  • 每隔一段時(shí)間(具體時(shí)間間隔由配置項(xiàng) ?
    plan_cache_evict_interval? 設(shè)置)系統(tǒng)會(huì)自動(dòng)檢查不同租戶在不同服務(wù)器上的計(jì)劃緩存,并判斷是否需要執(zhí)行計(jì)劃淘汰。如果某個(gè)計(jì)劃緩存占用的內(nèi)存超過該租戶設(shè)置的淘汰計(jì)劃的高水位線,則會(huì)觸發(fā)計(jì)劃緩存淘汰。

  • 執(zhí)行計(jì)劃淘汰策略
  • 當(dāng)觸發(fā)計(jì)劃緩存淘汰后,優(yōu)先淘汰最久沒被使用的執(zhí)行計(jì)劃,淘汰一部分執(zhí)行計(jì)劃后,當(dāng)計(jì)劃緩存使用的內(nèi)存為該租戶設(shè)置的淘汰計(jì)劃的低水位線時(shí),停止淘汰。

  • 與計(jì)劃緩存淘汰相關(guān)配置
    • ?plan_cache_evict_interval?
    • 該配置項(xiàng)用于設(shè)置檢查執(zhí)行計(jì)劃是否需要淘汰的間隔時(shí)間。

    • ?ob_plan_cache_percentage?
    • 該系統(tǒng)變量用于設(shè)置計(jì)劃緩存可使用內(nèi)存占租戶內(nèi)存的百分比。公式如下:計(jì)劃緩存最多可使用內(nèi)存(內(nèi)存上限絕對(duì)值)=租戶內(nèi)存上限 * ?
      ob_plan_cache_percentage?/100

    • ob_plan_cache_evict_high_percentage
    • 該系統(tǒng)變量用于設(shè)置觸發(fā)計(jì)劃緩存淘汰的內(nèi)存大小占內(nèi)存上限絕對(duì)值的百分比。公式如下:觸發(fā)計(jì)劃緩存淘汰的內(nèi)存大小(淘汰計(jì)劃的高水位線) = 內(nèi)存上限絕對(duì)值 * ?
      ob_plan_cache_evict_high_percentage?/100

    • ?ob_plan_cache_evict_low_percentage?
    • 該系統(tǒng)變量用于設(shè)置停止淘汰計(jì)劃時(shí)的內(nèi)存值(淘汰計(jì)劃的低水位線) 。公式如下:停止淘汰計(jì)劃時(shí)的內(nèi)存值(淘汰計(jì)劃的低水位線)= 內(nèi)存上限絕對(duì)值 * ?
      ob_plan_cache_evict_low_percentage?/100

例如,租戶內(nèi)存大小為 10 G,各參數(shù)值設(shè)置如下:

  • ?ob_plan_cache_percentage?=10
  • ?ob_plan_cache_evict_high_percentage?=90
  • ?ob_plan_cache_evict_low_percentage?=50
  • 則計(jì)算得出:

  • 計(jì)劃緩存內(nèi)存上限絕對(duì)值 = 10G * 10 / 100 = 1 G
  • 淘汰計(jì)劃的高水位線 = 1G * 90 / 100 = 0.9 G
  • 淘汰計(jì)劃的低水位線 = 1G * 50 / 100 = 0.5 G

由計(jì)算結(jié)果可知,當(dāng)該租戶在某個(gè)服務(wù)器上計(jì)劃緩存使用超過 0.9 G 時(shí),會(huì)觸發(fā)淘汰,優(yōu)先淘汰最久沒執(zhí)行的計(jì)劃,當(dāng)淘汰到使用內(nèi)存只有 0.5 G 時(shí),則停止淘汰。 如果淘汰速度沒有新計(jì)劃生成速度快,計(jì)劃緩存使用內(nèi)存達(dá)到內(nèi)存上限絕對(duì)值 1 G 時(shí),將不在往計(jì)劃緩存中添加新計(jì)劃,直到執(zhí)行淘汰后所占內(nèi)存小于 1 G 才會(huì)添加新計(jì)劃到計(jì)劃緩存中。

手動(dòng)淘汰

手動(dòng)淘汰是指強(qiáng)制將計(jì)劃緩存中計(jì)劃進(jìn)行刪除?,F(xiàn)在支持指定不同租戶對(duì)應(yīng)的當(dāng)前服務(wù)器或全部服務(wù)器中計(jì)劃緩存全部刪除,具體命令如下:


obclient>ALTER SYSTEM FLUSH PLAN CACHE [tenant_list] [global] 
/*其中 tenant_list 的格式為 tenant = 'tenant1, tenant2, tenant3….'*/

其中 tenant_list 和 global 為可選字段,使用說明如下:

  • 如果沒有指定 tenant_list,則清空所有租戶的計(jì)劃緩存。反之,則只清空特定租戶的計(jì)劃緩存。
  • 如果沒有指定 global,則清空本機(jī)的計(jì)劃緩存。反之,則清空該租戶所在的所有服務(wù)器上的計(jì)劃緩存。

計(jì)劃緩存的刷新

計(jì)劃緩存中執(zhí)行計(jì)劃可能因?yàn)楦鞣N原因而失效,這時(shí)需要將計(jì)劃緩存中失效計(jì)劃進(jìn)行刷新,即將該執(zhí)行計(jì)劃刪除后重新優(yōu)化生成計(jì)劃再加入計(jì)劃緩存。

如下場(chǎng)景會(huì)導(dǎo)致執(zhí)行計(jì)劃失效,需要對(duì)執(zhí)行計(jì)劃進(jìn)行刷新:

  • SQL 中涉及表的 Schema 變更時(shí)(比如添加索引、刪除或增加列等),該 SQL 在計(jì)劃緩存中所對(duì)應(yīng)的執(zhí)行計(jì)劃將被刷新。
  • SQL 中涉及重新收集表的統(tǒng)計(jì)信息時(shí),該 SQL 在計(jì)劃緩存中所對(duì)應(yīng)的執(zhí)行計(jì)劃會(huì)被刷新。由于 OceanBase 數(shù)據(jù)庫在數(shù)據(jù)合并時(shí)會(huì)統(tǒng)一進(jìn)行統(tǒng)計(jì)信息的收集,因此在每次進(jìn)行合并后,計(jì)劃緩存中所有計(jì)劃將被刷新。

計(jì)劃緩存的使用控制

計(jì)劃緩存可以使用系統(tǒng)變量及 HINT 實(shí)現(xiàn)使用控制。

  • 系統(tǒng)變量控制
  • 當(dāng) ?
    ob_enable_plan_cache? 設(shè)置為 TURE 時(shí),表示 SQL 請(qǐng)求可以使用計(jì)劃緩存;設(shè)置為 FALSE 時(shí),表示 SQL 請(qǐng)求不使用計(jì)劃緩存。默認(rèn)為 TURE。此系統(tǒng)變量可被設(shè)置為 SESSION 級(jí)別或者 GLOBAL 級(jí)別。

  • HINT 控制
    • 使用 HINT 語句? /+USE_PLAN_CACHE(NONE)/? 表示不使用計(jì)劃緩存。
    • 使用 HINT 語句 ?/+USE_PLAN_CACHE(DEFAULT)/? 表示使用計(jì)劃緩存。

計(jì)劃緩存暫不支持的場(chǎng)景

  • 執(zhí)行計(jì)劃所占內(nèi)存超過 20 M 時(shí),不會(huì)加入計(jì)劃緩存。
  • 如果該計(jì)劃為分布式執(zhí)行計(jì)劃且涉及多個(gè)表,不會(huì)加入計(jì)劃緩存。

計(jì)劃緩存的視圖

執(zhí)行計(jì)劃相關(guān)視圖包括:

  • ?(g)v$plan_cache_stat?記錄每個(gè)計(jì)劃緩存的狀態(tài),每個(gè)計(jì)劃緩存在該視圖中有一條記錄。
  • ?(g)v$plan_cache_plan_stat?記錄計(jì)劃緩存中所有執(zhí)行計(jì)劃的具體信息及每個(gè)計(jì)劃總的執(zhí)行統(tǒng)計(jì)信息。
  • ?(g)v$plan_cache_plan_explain?記錄某條 SQL 在計(jì)劃緩存中的執(zhí)行計(jì)劃。

有關(guān)視圖的詳細(xì)參數(shù)信息,請(qǐng)參考 計(jì)劃緩存相關(guān)視圖。


網(wǎng)站欄目:創(chuàng)新互聯(lián)OceanBase教程:OceanBase執(zhí)行計(jì)劃緩存
URL鏈接:http://m.5511xx.com/article/dpgecgc.html