を用いることができる表SELECT * FROM。 SQL言語リファレンスのCREATE PROFILE
章から
:
LOGICAL_READS_PER_CALL
(、解析の実行、またはフェッチ)SQL文を処理するための呼び出しのために読み取られたデータ・ブロックの許容数を指定します。 。
クイックテストを作成するには、不当に低いサイズ制限を100MBに設定しましょう。標準ブロックサイズが8KBであると仮定すると、制限は100 * 1024 * 1024 /(8 * 1024)= 12800ブロックである必要があります。
create profile reduced_io limit logical_reads_per_call 12800;
は今、いくつかの簡単な表を作成し、ステートメントが失敗したときに正確に確認するために、それらのすべてのデータを選択します。インデックスがない場合、これらのテーブルで
select count(*)
を実行すると、セグメント内のすべてのバイトを読み取る必要があります。
drop table test_40m;
drop table test_60m;
drop table test_80m;
drop table test_120m;
create table test_40m(a varchar2(1000));
create table test_60m(a varchar2(1000));
create table test_80m(a varchar2(1000));
create table test_120m(a varchar2(1000));
insert into test_40m select lpad('a', 1000, 'a') from dual connect by level <= 30 * 1024;
insert into test_60m select lpad('a', 1000, 'a') from dual connect by level <= 50 * 1024;
insert into test_80m select lpad('a', 1000, 'a') from dual connect by level <= 70 * 1024;
insert into test_120m select lpad('a', 1000, 'a') from dual connect by level <= 100 * 1024;
commit;
上記の数字はおそらく奇妙に見えます。たとえば、50MBのデータを60MBの表に挿入します。これは、セグメント/ブロック/行オーバーヘッドや自動エクステントサイジングなどの場合、セグメントサイズを正しく取得するのが難しいためです。しかし、彼らはすぐに十分なテストを受けることができます。
select segment_name, bytes/1024/1024 mb from dba_segments where segment_name like 'TEST_%M';
SEGMENT_NAME MB
------------ --
TEST_40M 35
TEST_60M 59
TEST_80M 88
TEST_120M 120
は今、そのプロファイルおよびそれらのテーブルから選択することで、ユーザを作成します。そのユーザーとの
drop user test_user;
create user test_user identified by "test_user#1A" profile reduced_io;
grant create session to test_user;
grant select on test_60m to test_user;
grant select on test_80m to test_user;
grant select on test_120m to test_user;
ログインし、テーブル内のすべてのデータを照会してみてください。小さなクエリは成功し、大きなクエリは失敗します。
sqlplus test_user/test_user#1A
...
SQL> select count(*) from jheller.test_40m;
COUNT(*)
----------
30720
SQL> select count(*) from jheller.test_60m;
select count(*) from jheller.test_60m
*
ERROR at line 1:
ORA-02395: exceeded call limit on IO usage
SQL>
制限は例外をスローしますが、すぐに発生します。制限が100メガバイトの場合、60メガバイトのテーブルでは失敗しません。多くのプロファイル機能は正確ではなく、I/Oがどれだけ読み書きしているかを正確に測定することは困難です。
(正式には、リソースマネージャはこれらの種類をより詳細に制御できると考えられていますが、実際には使用されていませんでした。多くのリソースを誰に割り当てるか)。
これを実装する前に、環境内で完全にテストする必要があります。それはおそらく非常に正確なことはありませんが、ばかげた質問を止めるのに十分かもしれません。
使用している実際のデータベースエンジンを報告する必要があります。 – fredt
オラクル...万が一10g以上?データベースリソースマネージャー私はここであなたを助けます。 https://docs.oracle.com/cd/B19306_01/server.102/b14231/dbrm.htm#i1010776 – Twelfth