oracle

Oracle メモリ管理 コンポーネント図

コンポーネント図

自動メモリ管理が推奨されていますが、HugePagesを利用する場合自動メモリ管理は使えないので注意が必要です。

自動メモリー管理(AMM)とHugePagesは、互換性がありません。AMMを使用すると、SGAメモリー全体は/dev/shmの下にファイルを作成することによって割り当てられます。Oracle DatabaseがAMMを使用してSGAを割り当てると、HugePagesは予約されません。Oracle Database 12cでHugePagesを使用するには、AMMを無効にする必要があります

https://docs.oracle.com/cd/E57425_01/121/UNXAR/appi_vlm.htm

メモリ管理に関する初期化パラメータ

  自動メモリ管理 自動共有メモリ管理 手動共有メモリ管理 自動PGAメモリ管理
memory_target
(動的)
SGAとPGAの合計としたい値 0 もしくは未設定 0 もしくは未設定  
memory_max_target
(静的)
memory_targetの最大値
memory_targetを誤って大きな値を設定したことを考慮した安全装置
     
sga_target 当項目設定値が最低値 当項目設定値(固定)範囲内で、各コンポーネントの値が自動調整 0 もしくは未設定  
sga_max_size (未設定の場合memory_max_targetの値が適用される)インスタンス起動時に当項目値でメモリを獲得する。 設定されている場合、この値がSGA上限値    
pga_aggregate_target       当項目設定値を超えない範囲内でPGA合計を自動調整(目標値)
pga_aggregate_limit       当項目設定値を超えるようになるとプロセスやセッションを強制的に中断や終了がはじまる
メモリ管理に関わる初期化パラメータの確認SQL
select w.LNO,w.NAME,to_number(w.VALUE) value
from 
(
    select
    p.NAME,p.VALUE,decode(p.NAME
    ,'memory_target',1
    ,'memory_max_target',2
    ,'sga_target',3
    ,'sga_max_size',4
    ,'pga_aggregate_target',5
    ,'pga_aggregate_limit',6
    ,'log_buffer',7
    ,'db_cache_size',8
    ,'shared_pool_size',9
    ,'java_pool_size',10
    ,'large_pool_size',11
    ) lno
    from v$parameter p
    where p.NAME in (
     'memory_target'
    ,'memory_max_target'
    ,'sga_target'
    ,'sga_max_size'
    ,'pga_aggregate_target'
    ,'pga_aggregate_limit'
    ,'log_buffer'
    ,'db_cache_size'
    ,'shared_pool_size'
    ,'java_pool_size'
    ,'large_pool_size'
    )
) w
order by w.LNO
;
初期化パラメータ出力例
SQL> SET LIN 100
SQL> SET PAGES 20
SQL> COLUMN LNO FORMAT 999
SQL> COLUMN NAME  FORMAT A24
SQL> COLUMN VALUE FORMAT 999,999,999,999
SQL> /

 LNO NAME                                VALUE
---- ------------------------ ----------------
   1 memory_target                           0
   2 memory_max_target                       0
   3 sga_target                  1,191,182,336
   4 sga_max_size                1,191,182,336
   5 pga_aggregate_target          396,361,728
   6 pga_aggregate_limit         2,147,483,648
   7 log_buffer                     13,328,384
   8 db_cache_size                           0
   9 shared_pool_size                        0
  10 java_pool_size                          0
  11 large_pool_size                         0
  12 db_block_buffers                        0

12行が選択されました。

SQL>
SQL*Plus出力用
SET LIN 100
SET PAGES 20
COLUMN LNO FORMAT 999
COLUMN NAME  FORMAT A24
COLUMN VALUE FORMAT 999,999,999,999
スポンサーリンク

コメント

  1. てすと より:

    import yaml
    import subprocess
    import sys
    from pathlib import Path
    import platform
    import json
    from urllib.parse import urlencode
    import re

    def load_curl_config(file_path):
    with open(file_path, ‘r’, encoding=’utf-8′) as f:
    return yaml.safe_load(f)

    def build_curl_command(config, show_headers):
    method = config.get(‘method’, ‘GET’)
    base_url = config[‘url’]

    params = config.get(‘params’, {})
    if params and method.upper() == ‘GET’:
    query_string = urlencode(params)
    full_url = f”{base_url}?{query_string}”
    else:
    full_url = base_url

    cmd = [‘curl’, ‘-s’]
    if show_headers:
    cmd += [‘-D’, ‘-‘]
    cmd += [‘-X’, method, full_url]

    headers = config.get(‘headers’, {})
    for key, value in headers.items():
    cmd += [‘-H’, f'{key}: {value}’]

    if method.upper() in [‘POST’, ‘PUT’]:
    if ‘data’ in config:
    cmd += [‘-d’, config[‘data’]]
    elif params:
    for k, v in params.items():
    cmd += [‘–data-urlencode’, f'{k}={v}’]

    cmd += [‘-w’, ‘\nHTTP Status: %{http_code}\n’]
    return cmd

    def quote_arg_bash(arg):
    # 特殊文字が利用されている場合シングルクォートで囲む
    if any(c in arg for c in [‘ ‘, ‘?’, ‘{‘, ‘}’, ‘:’, ‘”‘, ‘&’]):
    return f”‘{arg}'”
    return arg

    def quote_arg_ps(arg):
    # 今のところbash版と同じで問題なさそう
    return quote_arg_bash(arg)

    def parse_curl_output(output, show_headers):
    http_code = output.strip()[-3:]
    full_response = output.strip()[:-16] # ‘HTTP Status: ‘ + ‘ 999’ = 16

    if show_headers:
    header, unused, body = full_response.partition(‘\r\n\r\n’)
    if not body:
    header, unused, body = full_response.partition(‘\n\n’)
    return header.strip(), body.strip(), http_code
    else:
    return ”, full_response.strip(), http_code

    def handle_error(message):
    ERROR_CODE = “ERROR”
    print(message)
    return ERROR_CODE

    def needs_bearer_token(config):

    # Bearer トークンを抽出
    authorization_value = config[“headers”].get(“Authorization”)
    if authorization_value is None:
    return None # トークン取得不要
    #print(f”authorization_value===> {authorization_value}”)
    match = re.search(r”\[([^\]]+)\]”, authorization_value)
    if match:
    # トークンの取得が必要
    auth_yaml = match.group(1) # 抽出した値
    print(f”{auth_yaml} によるトークン取得を実施します”) # 出力: token_issue_sooni.yml
    config_path = Path(“templates”) / auth_yaml
    if not config_path.exists():
    return handle_error(f”{auth_yaml}ファイルが見つかりません。”)

    tconfig = load_curl_config(config_path)
    api_name = tconfig.get(‘api_name’, ‘(名称未設定)’)
    cmd = build_curl_command(tconfig, False)
    print(f”Token取得 curl ===> {cmd}”)
    result = subprocess.run(cmd, capture_output=True, text=True,encoding=”utf-8″,errors=”replace”)
    header, body, http_code = parse_curl_output(result.stdout, False)
    print(f”httpステータスコード: {http_code}\n”)
    try:
    if int(http_code) != 200:
    return handle_error(f”http_code:{http_code} トークン取得に失敗”)
    except ValueError:
    return handle_error(f”無効な HTTP ステータスコード: {http_code}”)

    if not body:
    return handle_error(“レスポンスボディが空です”)
    try:
    # JSON を辞書型に変換
    parsed = json.loads(body)
    #print(json.dumps(parsed, indent=2, ensure_ascii=False))
    # accesstoken の値を取得
    access_token = parsed.get(“accesstoken”)
    if not access_token: # 取得できなかった場合の処理を追加
    return handle_error(“アクセストークンの取得に失敗しました。”)
    #print(access_token)
    # [] 内の文字列を “newtoken” に置き換える
    config[“headers”][“Authorization”] = re.sub(r”\[.*?\]”,access_token, config[“headers”][“Authorization”])
    return access_token

    except json.JSONDecodeError:
    print(body)
    return handle_error(“JSON変換でエラー発生”)

    else:
    # トークン取得不要
    return None

    def main():
    if len(sys.argv) {cmd}”)
    result = subprocess.run(cmd, capture_output=True, text=True,encoding=”utf-8″,errors=”replace”)

    # 実行結果の整形
    header, body, http_code = parse_curl_output(result.stdout, show_headers)

    cmd[-1] = cmd[-1].replace(‘\n’, ‘\\n’) # 最後の要素の ‘\n’ をエスケープ
    bash_cmd = ‘ ‘.join(quote_arg_bash(arg) for arg in cmd)
    ps_cmd = ‘ ‘.join(quote_arg_ps(arg) for arg in cmd)

    print(“=== 実行コマンド ===”)
    print(f”対象API名: {api_name}”)
    print(“[bash/macOS 用]”)
    print(bash_cmd)
    print(“[PowerShell 用]”)
    print(ps_cmd)

    print(“\n=== 実行結果 ===”)
    print(f”httpステータスコード: {http_code}\n”)

    if show_headers:
    print(“レスポンスヘッダ:”)
    print(header)

    print(“\nレスポンスボディ:”)
    try:
    parsed = json.loads(body)
    print(json.dumps(parsed, indent=2, ensure_ascii=False))
    except json.JSONDecodeError:
    print(body)

    if __name__ == ‘__main__’:
    main()

タイトルとURLをコピーしました