天天看點

Informix IDS 11體系處置(918檢驗)認證指南,第 4 局部: 性能調優(7)

并行資料庫盤诘和MemoryGrantManager,PDQ,并行資料庫盤诘(Paralleldatabasequery,PDQ)是IDS從7.3版末尾引入的聽命。Informix資料庫供職器的這個

并行資料庫盤诘和 Memory Grant Manager

PDQ

并行資料庫盤诘(Parallel database query,PDQ)是 IDS 從 7.3 版末尾引入的聽命。Informix 資料庫供職器的這個特征可以大大進步性能。PDQ 使資料庫供職器可以分散盤诘的任務。歧,若是須要在一個大型表上設立建設索引,那麼可以将這項任務分散到多個線程和曆程。

分派和限定 PDQ 資本

PDQ 包含資本處置聽命。

當資料庫供職器哄騙 PDQ 并行實驗一個盤诘時,可以在壟斷體系上實驗較重的負載。可以調優以下資本:

  • 記憶體
  • CPU VP
  • 磁盤 I/O(關于分段表和臨時表空間)
  • 掃描線程

在設定裝備安插資料庫供職器時,必須思索 PDQ 的哄騙對其他使用者的影響。歧,若是運轉的盤诘要占用一切 CPU 資本,那麼資料庫供職器就不能對其他常常運轉得十分快的盤诘作出相應。是以必須小心,使要害的非 PDQ 盤诘仍然可以以可以接管的性能運轉。

可以用以下要領控制資料庫供職器對資本的哄騙:

  • 限定并行資料庫盤诘的優先級
  • 調解排遣 Memory Grant Manager 中的記憶體巨細
  • 限定掃描線程的數目
  • 限定并發盤诘的數目
PDQPRIORITY

PDQPRIORITY

現象變量确定資本的并行度,它和

MAX_PDQPRIOIRTY

一路用作關于資料庫供職器若何分派資本的比例因子。

清單 9. 設定 PDQPRIORITY 現象變量
setenv--PDQPRIORITY-- -HIGH------------------------------- -
                       -LOW-------------------------------- 
                       -OFF-------------------------------- 
                      '-resources-- --------------------- -'
                                   |  (1)                |
                                    '----------high_value-'
      
表 6. PDQPRIORITY 設定

設定

描畫

High

當資料庫供職器在一切效戶之間分派資本時,它将盡大約多的資本供應給盤诘

Low 或 1

并行地從分段表中取資料值

OFF

PDQ 處置被關閉

resources

0 到 100 之間的整數;設定抱負分派給盤诘的使用者苦求的 PDQ 資本的百分比

可選的較高值

苦求最大百分比的記憶體的可選整數值。當在 resources 值之後指定這個值時,将苦求用百分比表達的一定局限的記憶體

資料庫供職器公用于一個盤诘的資本越多,常常就能越快地完成盤诘。然則,若是其他盤诘也檢驗檢驗擷取那些相反的資本,就會發生發火對那些資本的競争。這會招緻性能降落。

可以哄騙 SQL 語句

SET PDQPRIORITY

手動調解排遣特定會話的優先級。

用 MAX_PDQPRIORITY 限定優先級

限定資料庫供職器可分派給随意 DSS 盤诘的 PDQ 資本的 onconfig 參數是

MAX_PDQPRIORITY

MAX_PDQPRIORITY

用作任何特定客戶機苦求的資本占

PDQPRIORITY

的百分比。歧,假定一個使用者急于得到資料,是以将

PDQPRIORITY

設為 100。然則 DBA 認識到每天早晨的同一個時分須要運轉一些批處置任務,是以将

MAX_PDQPRIORITY

設為 50。100 的 50% 是 50,是以使用者抱負上可以得到的最大

PDQPRIORITY

資本數為 50。

當資料庫供職器聯機時,可以哄騙

onmode -D

改削

MAX_PDQPRIORITY

的值。

在同時具有 OLTP 和 DSS 盤诘的體系上,必須接納均衡步履。若是

MAX_PDQPRIORITY

設定得太高,則倒運于 OLTP 盤诘。若是

MAX_PDQPRIORITY

設定得太低,則 DSS 盤诘不能得到令人稱心的性能。是以,DBA 必須小心腸調優這個變量。

可以将

MAX_PDQPRIORITY

設定為表 7 中描畫的以下值:

表 7. MAX_PDQPRIORITY 設定

關閉 PDQ。DSS 盤诘倒運用并行

1

并行地從分段表中取資料(并行掃描),然則倒運用其他方式的并行

100

哄騙一切可用的資本并行地處置盤诘

随意數值

0 到 100 之間的一個整數;設定抱負分派給盤诘的使用者苦求的 PDQ 資本的百分比

Informix IDS 11體系處置(918檢驗)認證指南,第 4 局部: 性能調優(7)
Informix IDS 11體系處置(918檢驗)認證指南,第 4 局部: 性能調優(7)
Informix IDS 11體系處置(918檢驗)認證指南,第 4 局部: 性能調優(7)

用 Memory Grant Manager 調解排遣記憶體資本

DS_TOTAL_MEMORY onconfig

參數指定可用于 PDQ 盤诘的記憶體巨細。這個值單元為 KB。

DS_TOTAL_MEMORY

應該被設定得足夠大,以便可以一次性地将較大的任務裝入記憶體。然則,在設定裝備安插

DS_TOTAL_MEMORY

時須要思索以下方面:

  • 計較機上的總記憶體巨細 -- 不要超越它
  • 開支,歧緩沖池
  • 計較機上的其他曆程。若是因為這個值設定得太高而招緻換頁或交流,則會淘汰性能優勢,抱負上反而降低了性能

SHMTOTAL

指定用于資料庫供職器的一切記憶體(常駐記憶體、編造記憶體和舊事記憶體這幾局部的總和)。

SHMVIRTSIZE

指定共享記憶體中編造記憶體的初始巨細。

一切分派給

DS_TOTAL_MEMORY

的記憶體都在共享記憶體的編造記憶體中。某些壟斷體系關于每個添加到共享記憶體的附加段有一定的性能開支。是以應适外埠調優

SHMVIRTSIZE

SHMTOTAL

,以分派較多數目标段。

關于 OLTP 使用序次,基本提議是将

DS_TOTAL_MEMORY

設定為

SHMTOTAL

值的 20% 到 50%,單元為 KB。

若是 DSS 盤诘獨占地哄騙資料庫供職器,則将

DS_TOTAL_MEMORY

SHMTOTAL

的 90% 到 100%。

關于同時哄騙兩種典範的盤诘的體系,基本提議是将

DS_TOTAL_MEMORY

SHMTOTAL

的 50% 到 80%。

可以用

onmode -M

敕令靜态地設定

DS_TOTAL_MEMORY

細緻:

DS_TOTAL_MEMORY

允諾哄騙的值與平台有關。關于 32 位平台,這個值必須是 128 * DS_MAX_QUERIES 到 1,048,576 之間的一個無辨別表記标幟整數。而在 64 位體系上,限定局限常常更大一些,并且因壟斷體系而異。歧,在 HP 9000 平台上,最大值是 4,294,967,296。

Informix IDS 11體系處置(918檢驗)認證指南,第 4 局部: 性能調優(7)
Informix IDS 11體系處置(918檢驗)認證指南,第 4 局部: 性能調優(7)
Informix IDS 11體系處置(918檢驗)認證指南,第 4 局部: 性能調優(7)

DS_MAX_SCANS ONCONFIG

參數限定可以并發運轉的 PDQ 掃描線程的數目。若是這個參數設定得太高,那麼資料庫供職器就有太多來自多個并發運轉的抉擇貪圖支撐盤诘的掃描線程。這将招緻資本競争和停當行列增進,因為掃描線程會等待機緣末尾任務。

可以哄騙下面的公式計較分派給一個盤诘的掃描線程的數目:

清單 10. 計較分派給一個盤诘的掃描線程的數目
scan_threads  = min (nfrags, (DS_MAX_SCANS * pdqpriority / 
100 * MAX_PDQPRIORITY / 100) )
      
表 8. 公式中的各項

nfrags

具有最大數目标片段的表中的片段的數目

用于阿誰特定盤诘的

PDQPRIORITY

可以哄騙

onmode -S

選項靜态地設定最大數目标掃描線程。

這個值必須是 10 到 1,048,576 之間的一個無辨別表記标幟整數。

歧,假定一個大型表包含 50 個片段。若是沒有設定

DS_MAX_SCANS

,那麼資料庫供職器将分派 50 個掃描線程。是以,引擎将檢驗檢驗運轉 50 個掃描線程讀這個表。

現在,假定這是任何使用者都可以運轉的一個述說。若是 50 個人檢驗檢驗運轉阿誰述說會如何呢?引擎将為阿誰述說的每次運轉分派 50 個線程。是以,一共要派生 2500 個線程。若是增進其他述說和其他 DSS 盤诘的開支,可以看到存在很多競争。

DS_MAX_SCANS

就是用于處置這個成就。

和所無性能方面的思索一樣,這是一種均衡步履。為了淘汰大型盤诘的掃描線程在停當行列中的等待時光,可以淘汰分派的掃描線程數目。然則,若是一個盤诘的掃描線程數目少于片段數目,盤诘須要花更長的時光實驗。

Informix IDS 11體系處置(918檢驗)認證指南,第 4 局部: 性能調優(7)
Informix IDS 11體系處置(918檢驗)認證指南,第 4 局部: 性能調優(7)
Informix IDS 11體系處置(918檢驗)認證指南,第 4 局部: 性能調優(7)

限定并發 PDQ 盤诘的數目

DS_MAX_QUERIES

是指定可以并發運轉的 PDQ 盤诘的最大數目标

ONCONFIG

參數。Memory Grant Manager (MGM) 依據清單 11 中的公式為一個盤诘預留記憶體。下面的公式也诠釋資料庫供職器若何決議将多少記憶體分派給一個盤诘:

清單 11. 為一個盤诘預留記憶體
memory_reserved = DS_TOTAL_MEMORY *
                    (PDQ-priority / 100) *
                 (MAX_PDQPRIORITY / 100)
      

onmode -Q

靜态地設定

DS_MAX_QUERIES

Informix IDS 11體系處置(918檢驗)認證指南,第 4 局部: 性能調優(7)
Informix IDS 11體系處置(918檢驗)認證指南,第 4 局部: 性能調優(7)
Informix IDS 11體系處置(918檢驗)認證指南,第 4 局部: 性能調優(7)

Memory Grant Manager

onstat -g mgm

選項列印 Memory Grant Manager (MGM) 資本資訊。可以哄騙

onstat -g mgm

選項看守 MGM 若何諧和記憶體哄騙和掃描線程。

讓我們看看一個示例輸入:

清單 12. onstat -g mgm 的示例輸入
IIBM Informix Dynamic Server Version 11.10.FB5TL -- On-Line -- Up 10 days 01:35:2
7 -- 61440 Kbytes
Memory Grant Manager (MGM) 
--------------------------
MAX_PDQPRIORITY	   50
DS_MAX_QUERIES:    2
DS_MAX_SCANS:      1048576
DS_NONPDQ_QUERY_MEM: 128 KB
DS_TOTAL_MEMORY:   256 KB
Queries:   Active     Ready   Maximum
                0         0         2 
Memory:     Total      Free   Quantum 
(KB)          256       256       128 
Scans:      Total      Free   Quantum 
           1048576   1048576         1 
Load Control:    (Memory)      (Scans)  (Priority)  (Max Queries)   (Reinit)
                   Gate 1       Gate 2      Gate 3         Gate 4     Gate 5
(Queue Length)          0            0           0              0          0
Active Queries:  None 
Ready Queries:  None 
Free Resource        Average #        Minimum # 
--------------    ---------------     --------- 
Memory               0.0  - 0.0            32
Scans                0.0  - 0.0          1048576 
Queries              Average #        Maximum #    Total #
--------------    ---------------     ---------    -------
Active               0.0  - 0.0             0          0
Ready                0.0  - 0.0             0          0
Resource/Lock Cycle Prevention count:  0
      

Memory Grant Manager 操作一系列的門以確定 PDQ 盤诘有足夠的資本以适外埠運轉。

表 9. 門描畫

門号

能否有足夠的可用記憶體?

2

能否超越了 DS_MAX_SCANS?

3

這個門是一切具有相反優先級的盤诘的一個行列

4

能否超越了 DS_MAX_QUERIES?

5

確定在允諾行列運轉之前不靜态變動資本

份額

onstat -g mgm

輸入顯示的一種資本中,一個單元的記憶體稱作一個份額(quantum)。記憶體份額洩漏顯示一個單元的記憶體:

份額是在分派記憶體時确定的。它不是一個靜态的巨細。

清單 13. 份額界說
memory quantum = DS_TOTAL_MEMORY / DS_MAX_QUERIES
      
memory quantum = (256 * 1024) / 2