zoukankan      html  css  js  c++  java
  • Informix IDS 11体系处置(918检验)认证指南,第 4 局部: 性能调优(7)

    并行数据库盘诘和 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_PDQPRIORITYMAX_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 设置
    设置 描画
    0 关闭 PDQ。DSS 盘诘倒运用并行
    1 并行地从分段表中取数据(并行扫描),然则倒运用其他方式的并行
    100 哄骗一切可用的资本并行地处置盘诘
    随意数值 0 到 100 之间的一个整数;设置抱负分派给盘诘的用户苦求的 PDQ 资本的百分比









    用 Memory Grant Manager 调解排遣内存资本

    DS_TOTAL_MEMORY onconfig 参数指定可用于 PDQ 盘诘的内存巨细。这个值单元为 KB。

    DS_TOTAL_MEMORY 应该被设置得足够大,以便可以一次性地将较大的任务装入内存。然则,在设置装备安插 DS_TOTAL_MEMORY 时须要思索以下方面:

    • 计较机上的总内存巨细 -- 不要超越它
    • 开支,歧缓冲池
    • 计较机上的其他历程。若是因为这个值设置得太高而招致换页或交流,则会淘汰性能优势,抱负上反而降低了性能

    SHMTOTAL 指定用于数据库供职器的一切内存(常驻内存、编造内存和旧事内存这几局部的总和)。SHMVIRTSIZE 指定共享内存中编造内存的初始巨细。

    一切分派给 DS_TOTAL_MEMORY 的内存都在共享内存的编造内存中。某些垄断体系关于每个添加到共享内存的附加段有一定的性能开支。所以应适外埠调优 SHMVIRTSIZESHMTOTAL,以分派较多数目标段。

    关于 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。









    限定扫描线程的数目

    DS_MAX_SCANS ONCONFIG 参数限定可以并发运转的 PDQ 扫描线程的数目。若是这个参数设置得太高,那么数据库供职器就有太多来自多个并发运转的抉择贪图支撑盘诘的扫描线程。这将招致资本竞争和停当行列增进,因为扫描线程会等待机缘末尾任务。

    可以哄骗下面的公式计较分派给一个盘诘的扫描线程的数目:

    清单 10. 计较分派给一个盘诘的扫描线程的数目

                        				
    scan_threads  = min (nfrags, (DS_MAX_SCANS * pdqpriority / 
    100 * MAX_PDQPRIORITY / 100) )
    



    表 8. 公式中的各项
    项 描画
    nfrags 具有最大数目标片段的表中的片段的数目
    PDQPRIORITY 用于阿谁特定盘诘的 PDQPRIORITY 设置


    可以哄骗 onmode -S 选项静态地设置最大数目标扫描线程。

    这个值必须是 10 到 1,048,576 之间的一个无标识表记标帜整数。

    歧,假定一个大型表包含 50 个片段。若是没有设置 DS_MAX_SCANS,那么数据库供职器将分派 50 个扫描线程。所以,引擎将检验检验运转 50 个扫描线程读这个表。

    现在,假定这是任何用户都可以运转的一个述说。若是 50 个人检验检验运转阿谁述说会如何呢?引擎将为阿谁述说的每次运转分派 50 个线程。所以,一共要派生 2500 个线程。若是增进其他述说和其他 DSS 盘诘的开支,可以看到存在很多竞争。DS_MAX_SCANS 就是用于处置这个成就。

    和所无性能方面的思索一样,这是一种均衡步履。为了淘汰大型盘诘的扫描线程在停当行列中的等待时光,可以淘汰分派的扫描线程数目。然则,若是一个盘诘的扫描线程数目少于片段数目,盘诘须要花更长的时光实验。









    限定并发 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









    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. 门描画
    门号 描画
    1 能否有足够的可用内存?
    2 能否超越了 DS_MAX_SCANS?
    3 这个门是一切具有相反优先级的盘诘的一个行列
    4 能否超越了 DS_MAX_QUERIES?
    5 确保在允诺行列运转之前不静态变动资本


    份额

    onstat -g mgm 输入显示的一种资本中,一个单元的内存称作一个份额(quantum)。内存份额泄漏显示一个单元的内存:

    份额是在分派内存时确定的。它不是一个静态的巨细。

    清单 13. 份额界说

                        
    memory quantum = DS_TOTAL_MEMORY / DS_MAX_QUERIES
    


    歧,回到 清单 13 中的示例输入,让我们拔出一些数字:

    清单 14. 份额界说

                        
    memory quantum = (256 * 1024) / 2
    


    示例运转生成一个 131072 字节的份额。

    可以看到,允诺并发运转的盘诘越多,每个份额就越小。



    版权声明: 原创作品,允诺转载,转载时请务必以超链接方式标明文章 原始来由 、作者信息和本声明。否则将清查法律责任。

  • 相关阅读:
    android用户界面对话框
    JSP+JAVABEAN+SERVLET模式的注册实例实现
    android用户界面组件Widget网络视图WebView
    android广播事件处理broadcast receive
    android用户界面组件Widget地图视图MapView
    android用户界面组件Widget画廊视图Gallery
    android用户界面组件Widget网格视图GridView
    Windows Phone 7 hello world
    Android组件的通讯Intent
    android的互联网开发
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1973029.html
Copyright © 2011-2022 走看看