IISにOSSをインストールするための情報サイト [IIS de OSS 64bit]

IIS de OSS 64bit > DB一覧 > Oracle > Windows Oracleで利用するCPUを1つに制限する方法

本ページはOracle10gで確認しています。その他のバージョンは分からんです。

個々人のデスクトップPCにもデュアルコアが浸透してきており、とうとう私が開発に利用しているマシンもAthlon 64X2 デュアルコアになりました。 スペックも良くなってきたので、自分のPCにOracleも入れて開発するスタイルもボチボチあるようです。

しかしながら、おも~いSQLを流してしまうと、Oracleどころか、他のタスク全体が重くなってしまい、どうにも満足できない事があります。 そこで、表題の通り、せっかくデュアルコアなんだから、Oracleに片方だけCPUを割り振って、他のタスクもサクサク動くようにしようという目論見で、設定を探してみました。 以前、SQL Server 2005を利用したときは、SQL Server Management StudioからGUIで簡単に出来たので、Oracleでもパラメータか隠しパラメータ辺りで変更するのかなと思って探したところ、レジストリをいじって変えるとの内容が書いてありました。(OTNにあるWindows用のドキュメントにも書いてあります。)

設定例は以下。

レジストリ名ORACLE_AFFINITY
場所HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_[ORACLE_SID]
  1. CPU1だけをOracleに割り当てる場合
    設定値: MASK:1
  2. CPU2だけをOracleに割り当てる場合
    設定値: MASK:2 

MASKの代わりにUSERを指定すると、ユーザプロセスだけが、DEFを指定するとバックグラウンドだけがCPU制限を受けるらしい。(この辺は斜め読みなのでタブンです) 他にもDBWR, LGWRなどプロセスごとに割り当てるCPUを自分で決められる。 プロセスごとにCPUを割り当てるのは、たくさんCPUがある場合の話で、デスクトップ開発機に関してはおそらく無縁な値だろう。。。 ちなみに上記にある「MASK」はマニュアルには書いてなかったが、Oracle全般のCPU利用をマスクする事が出来るっぽい。

なお、レジストリ値はWindowsのサービスからOracleが起動するタイミングで読み込まれるので、レジストリ変更後はサービスの再起動が必要である。

さて、CPUがきちんとマスクされたかを確かめるために簡単なPL/SQLを実行してみよう。

SQL*Plusを立ち上げて、、、

declare
    v_tmp number(16) := 0;
begin
    loop
        v_tmp := v_tmp + 1;
        if v_tmp > 1000000 then
            exit;
        end if;
    end loop;
end;
/

タスクマネージャを立ち上げて確かめると、確かに2つ見えるCPUの片側だけが100%になっている:D

コメント


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ
Last-modified: 2010-02-21 (日) 09:30:15 (3937d)