рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛: рджреБрд╢реНрдорди рд╕реЗ рджреЛрд╕реНрдд рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рдХ рдХреИрд╕реЗ рдЪрд╛рд▓реВ рдХрд░реЗрдВ

рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рд╡рд┐рдХреНрдЯрд░ рд╡рд░рд▓рд╛рдореЛрд╡ ( varlamovVp18 ), OCP рд╣реИрдВред
рдореВрд▓ рд▓реЗрдЦ 07/07/2017 рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реБрдЖ рдерд╛ ред
рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓реЗрдЦрдХ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдзрдиреНрдпрд╡рд╛рдж - рдХреНрд░реВрд░рддрд╛рдЧ ред

рд╣рдорд╛рд░реА рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдкреНрд░рдгрд╛рд▓реА рдЖрдорддреМрд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдирд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╕реИрдХрдбрд╝реЛрдВ рд▓рдВрдмреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреА рд╣реИред рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдФрд░ рдПрдХ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ (рджреИрдирд┐рдХ, рд╕рд╛рдкреНрддрд╛рд╣рд┐рдХ, рдорд╛рд╕рд┐рдХ) рд╣реИред рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдЕрд╕рдорд╛рди рдбреЗрдЯрд╛ рдХреЗ рдХрд╛рд░рдг, рдПрдХ рдХреНрд╡реЗрд░реА рд░рд┐рдкреЛрд░реНрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╛ рддреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдпрд╛ рдорд┐рд▓рд┐рдпрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░ рд╕рдХрддреА рд╣реИ (рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд▓рд╛рдЗрдВрдЯреНрд╕ рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрддреА рд╣реИ)ред рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдкреЛрд░реНрдЯ рдПрдХ рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд▓реЗрддреА рд╣реИ, рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреА рд╣реИ, рдлрд┐рд░ рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдерд┐рд░ рдХрд░реНрд╕рд░ рдЦреЛрд▓рддрд╛ рд╣реИ рдФрд░ рдЕрдВрдд рдореЗрдВ рдЗрд╕ рдЦреБрд▓реЗ рдХрд░реНрд╕рд░ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред DB рдкреИрд░рд╛рдореАрдЯрд░ CURSOR_SHARING FORCE рдкрд░ рд╕реЗрдЯ рд╣реИред
рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХрд┐рд╕реА рдХреЛ рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рджреЛрдиреЛрдВ рдХреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛ рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдФрд░ рдЬрдм рдХреНрд╡реЗрд░реА рдХреЛ рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдмрд╛рдЙрдВрдб рд╡реИрд░рд┐рдПрдмрд▓реНрд╕ рдПрдХ рд╕рдмрдСрдкреНрдЯрд┐рдорд▓ рдХреНрд╡реЗрд░реА рдкреНрд▓рд╛рди рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдкрдиреА рдкреБрд╕реНрддрдХ "рдУрд░реЗрдХрд▓ рдПрдХреНрд╕рдкрд░реНрдЯ рдкреНрд░реИрдХреНрдЯрд┐рд╕реЗрд╕" рдореЗрдВ рдПрд▓реЗрдХреНрд╕ рдЧреЛрд░реНрдмрд╛рдЪреЗрд╡ рдЯреЙрдо рдХреАрдЗрдЯ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдИ рдЧрдИ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╣рд╛рдиреА рджреЗрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдмрд░рд╕рд╛рдд рдХреЗ рд╕реЛрдорд╡рд╛рд░ рдХреЛ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рддрд╛ рдерд╛ред рдпрд╣ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдерд╛:
тАЬрдПрдВрдб-рдпреВрдЬрд╝рд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЬрдм рд╕реЛрдорд╡рд╛рд░ рдХреЛ рднрд╛рд░реА рдмрд╛рд░рд┐рд╢ рд╣реБрдИ, рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рджрд░реНрд╢рди рдмрд╣реБрдд рднрдпрд╛рдирдХ рдерд╛ред рд╕рдкреНрддрд╛рд╣ рдХреЗ рдХрд┐рд╕реА рднреА рджрд┐рди рдпрд╛ рд╕реЛрдорд╡рд╛рд░ рдХреЛ рдмрд╛рд░рд┐рд╢ рдХреЗ рдмрд┐рдирд╛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереАред рдбреАрдмреАрдП рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рддрдЪреАрдд рд╕реЗ, рдЯреЙрдо рдХрд╛рдЗрдЯ рдиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдЬрдм рддрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛, рддрдм рддрдХ рдХрдард┐рдирд╛рдЗрдпрд╛рдВ рдмрдиреА рд░рд╣реАрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдкреНрд░рджрд░реНрд╢рди рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ рдЧрдпрд╛ред рд╡рд╣ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдХрд╛рдо рдерд╛: рд╕реЛрдорд╡рд╛рд░ рдХреА рдмрд╛рд░рд┐рд╢ - рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВред "

рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдорд▓рд╛ рд╣реИ, рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЬрд╛рджреВ рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреЗрд╡рд▓ рдУрд░реЗрдХрд▓ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреЗ рдЙрддреНрдХреГрд╖реНрдЯ рдЬреНрдЮрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕рдорд╛рдзрд╛рди рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред
рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЕрд╕рдорд╛рди рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВред

SQL> CREATE TABLE VVP_HARD_PARSE_TEST(C1 NUMBER, C2 NUMBER, C3 VARCHAR2(300)); TABLE created. SQL> INSERT INTO VVP_HARD_PARSE_TEST SELECT ROWNUM C1, CASE WHEN LEVEL < 9 THEN 1 WHEN MOD(ROWNUM, 100)=99 THEN 99 ELSE 1000000 END C2, RPAD('A', 300, 'A') C3 FROM DUAL CONNECT BY LEVEL CREATE INDEX IND_VVP_HARD_PARSE_TEST_C2 ON VVP_HARD_PARSE_TEST(C2); INDEX created. SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => USER, TABNAME => 'VVP_HARD_PARSE_TEST', CASCADE => TRUE, METHOD_OPT=>'FOR ALL INDEXED COLUMNS SIZE 254'); PL/SQL PROCEDURE successfully completed. SQL> SELECT histogram FROM user_tab_columns WHERE table_name = 'VVP_HARD_PARSE_TEST' AND column_name = 'C2'; HISTOGRAM --------- FREQUENCY SQL> SELECT c2, COUNT(*) FROM VVP_HARD_PARSE_TEST GROUP BY c2 ORDER BY 1; C2 COUNT(*) ----------------------- 1 8 99 10000 1000000 989992 


рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд▓рд╛рдЦ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ VVP_HARD_PARSE_TEST рддрд╛рд▓рд┐рдХрд╛ рд╣реИ, рдЬрд╣рд╛рдВ 10,000 рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдлрд╝реАрд▓реНрдб C2 = 99 рд╣реИ, C2 = 1 рдХреЗ рд╕рд╛рде 8 рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВ, рдФрд░ C2 = 1,000,000 рдХреЗ рд╕рд╛рде рд╢реЗрд╖ рд╣реИред рдлрд╝реАрд▓реНрдб C2 рдХреЗ рдмреАрдЪ рдХрд╛ рд╣реЛрд▓реЛрдЧреНрд░рд╛рдо рдЗрд╕ рдбреЗрдЯрд╛ рд╡рд┐рддрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Oracle рдЕрдиреБрдХреВрд▓рдХ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдбреЗрдЯрд╛ рдХреЗ рдЕрд╕рдорд╛рди рд╡рд┐рддрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдЖрдкрдХреЛ рдЕрдиреБрд░реЛрдзрд┐рдд рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд╣реА рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛ рдЪреБрдирдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╣рдо рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рд░рд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ рдирд┐рд╡реЗрджрди рдХреЗ рд▓рд┐рдП

SELECT * FROM VVP_HARD_PARSE_TEST WHERE c2 = :p

рдпрджрд┐ p = 1 рд╣реИ, рддреЛ INDEX RANGE SCAN рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдХреЗрд╕ p = 1000000 рдХреЗ рд▓рд┐рдП FULL TABLE SCAN рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред Query1 рдФрд░ Query1000000 рдкреНрд░рд╢реНрди рд╕рдорд╛рди рд╣реИрдВ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдкрд╛рда рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рдпрд╣ рдЕрд▓рдЧ рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 DECLARE p NUMBER; v NUMBER; BEGIN V := 0; p := 1000000; FOR rec IN (SELECT /*+query1000000*/ * FROM VVP_HARD_PARSE_TEST WHERE c2 = p) LOOP V := v + 1; END LOOP; dbms_output.put_line(v); v : =0; p := 1; FOR rec IN (SELECT /*+query1000000*/ * FROM VVP_HARD_PARSE_TEST WHERE c2 = p) LOOP V := v + 1; END LOOP; dbms_output.put_line(v); ----------------- V := 0; p := 1; FOR rec IN (SELECT /*+query1*/ * FROM VVP_HARD_PARSE_TEST WHERE c2 = p) LOOP V := v + 1; END LOOP; dbms_output.put_line(v); v := 0; p := 1000000; FOR rec IN (SELECT /*+query1*/ * FROM VVP_HARD_PARSE_TEST WHERE c2 = p) LOOP V := v + 1; END LOOP; dbms_output.put_line(v); END; 

рдЖрдЗрдП рдЕрдм рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рджреЗрдЦреЗрдВ:

 SQL> SELECT sql_id, child_number, executions, plan_hash_value, sql_text FROM v$sql WHERE sql_text LIKE 'SELECT % * FROM VVP_HARD_PARSE_TEST WHERE C2%'; SQL_ID CHILD_NUMBER EXECUTIONS PLAN_HASH_VALUE SQL_TEXT ------------------------------------------------- 7rqnhhp6pahw2 0 2 2782757451 SELECT /*+query1000000*/ * FROM VVP_HARD_PARSE_TEST WHERE C2 = :B1 7xwt28hvw3u9s 0 2 2463783749 SELECT /*+query1*/ * FROM VVP_HARD_PARSE_TEST WHERE C2 = :B1 SQL> SELECT * FROM TABLE(dbms_xplan.display_cursor(sql_id => '7rqnhhp6pahw2', format => 'basic +peeked_binds')); SELECT /*+query1000000*/ * FROM VVP_HARD_PARSE_TEST WHERE C2 = :B1 PLAN hash VALUE: 2782757451 ------------------------------------------------- | Id | Operation | Name | ------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | TABLE ACCESS FULL| VVP_HARD_PARSE_TEST | ------------------------------------------------- Peeked Binds (IDENTIFIED BY position): -------------------------------------- 1 - :B1 (NUMBER): 1000000 SQl> SELECT * FROM TABLE(dbms_xplan.display_cursor(sql_id => '7xwt28hvw3u9s', format => 'basic +peeked_binds')); SELECT /*+query1*/ * FROM VVP_HARD_PARSE_TEST WHERE C2 = :B1 PLAN hash VALUE: 2463783749 ------------------------------------------------------------------ | Id | Operation | Name | ------------------------------------------------------------------ | 0 | SELECT STATEMENT | | | 1 | TABLE ACCESS BY INDEX ROWID| VVP_HARD_PARSE_TEST | | 2 | INDEX RANGE SCAN | IND_VVP_HARD_PARSE_TEST_C2 | ------------------------------------------------------------------ Peeked Binds (IDENTIFIED BY position): -------------------------------------- 1 - :B1 (NUMBER): 1 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдордп рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ (рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП CHILD_NUMBER = 0 рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдПрдХ рдЪрд╛рдЗрд▓реНрдб рдХрд░реНрд╕рд░ рдореМрдЬреВрдж рд╣реИ)ред рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рджреЛ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (EXECUTION = 2)ред рд╣рд╛рд░реНрдб рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди, рдУрд░реЗрдХрд▓ рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдпреЛрдЬрдирд╛ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╣ рдЕрдЧрд▓реЗ рд░рди рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░ рджреВрд╕рд░реЗ рд░рди рдореЗрдВ рдмрджрд▓ рдЧрдП рд╣реЛрдВред рдЧреИрд░-рдЗрд╖реНрдЯрддрдо рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЪрд░ C2 = 1 рдХреЗ рд╕рд╛рде Query1000000, INDEX RANGE SCAN рдХреЗ рдмрдЬрд╛рдп FULL TABLE SCAN рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЖрд╡реЗрджрди рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдХреНрд╡реЗрд░реА рдореЗрдВ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкрдиреА рдЬреНрдЮрд╛рдд рдХрдорд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЧрддрд┐рд╢реАрд▓ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЕрдиреНрдп рддрд░реАрдХрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░ рдХреЗ рд▓рд┐рдП рдХреНрд╡реЗрд░реА рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рдирд╛ рд╣реИ ( ALTER SESSION SET "_OPTIM_PEEK_USER_BINDS" = FALSE ) рдпрд╛ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо ( рд▓рд┐рдВрдХ ) рдХреЛ рд╣рдЯрд╛рдПрдВред

рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдиреАрддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЙрдкрдпреЛрдЧ рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд░реНрдЪреБрдЕрд▓ рдкреНрд░рд╛рдЗрд╡реЗрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ (рд╡рд┐рд╕реНрддреГрдд рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓, рдлрд╛рдЗрди рдЧреНрд░реЗрдирдб рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ , рдкрдВрдХреНрддрд┐ рд╕реНрддрд░ рдирд┐рдпрдВрддреНрд░рдг) рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдордХреНрдЦреА рдкрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЬрдм рднреА рдЕрдиреБрд░реЛрдз рд╡рд┐рд╕реНрддреГрдд рдкрд╣реБрдВрдЪ рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЕрдиреБрд░реЛрдз рдпреЛрдЬрдирд╛ рдХрд╛ рдкреВрд░рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рд╡рд░реНрдгрди рд░рд╛рдиреНрдбрд╛рд▓рдл рдЧреАрд╕реНрдЯ рдХреЗ рдПрдХ рд▓реЗрдЦ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдиреБрдХрд╕рд╛рди рдкреВрд░реНрдг рдкрд░реНрд╕ рдХреА рдмрдврд╝рддреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рд╣реИред

рджреЗрдЦрддреЗ рд╣реИрдВ рдЕрдм рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗред рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рддреАрди рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ - рд▓рд╛рд░реНрдЬ, рдореАрдбрд┐рдпрдо рдПрдВрдб рд╕реНрдореЙрд▓ (рдПрд▓рдПрдордПрд╕ рдпрд╛ 9-5-1) - рд╡рд░реНрд╖ рдХреЗ рджреМрд░рд╛рди рд▓реЗрдирджреЗрди рдпрд╛ рд▓реЗрдирджреЗрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рдЦреНрддреА рд╕реЗ рдЕрд╡рдзрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ: рдорд╛рд╕рд┐рдХ - рдмрдбрд╝реЗ, рд╕рд╛рдкреНрддрд╛рд╣рд┐рдХ - рдордзреНрдп, рджреИрдирд┐рдХ - рдЫреЛрдЯреЗ рдпрд╛ 9-5-1ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдорд╛рдзрд╛рди рд╕рд░рд▓ рд╣реИ - рд╣рдо рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╢реНрд░реЗрдгреА рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрд╡рдзрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ 9 рд╕рдВрднрд╡ рдмрд╛рд▓ рд╢реНрд░рд╛рдк рдорд┐рд▓рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рднрд┐рдиреНрди рдиреАрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрд╡реЗрд░реА рд╣рдореЗрдВ рдПрдХ рд╣реА рдХреНрд╡реЗрд░реА рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ рддрдХ рд▓реЗ рдЬрд╛рдПрдЧреА, рдЗрд╕рд╕реЗ SQL PLAN MANAGEMENT (sql plan baseline) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

 SQL> CREATE TABLE HARD_PARSE_TABLE AS SELECT * FROM dual; TABLE created. SQL> CREATE TABLE CLIENTS_HP_STATISTICS (client_seqno NUMBER, client_id VARCHAR2(255), cnt_year NUMBER); TABLE created. SQL> INSERT INTO CLIENTS_HP_STATISTICS (client_seqno, client_id, cnt_year) VALUES (1, 'SMALL CLIENT', 8); 1 ROW inserted. SQL> INSERT INTO CLIENTS_HP_STATISTICS (client_seqno, client_id, cnt_year) VALUES (99, 'MIDDLE CLIENT', 50001); 1 ROW inserted. SQL> INSERT INTO CLIENTS_HP_STATISTICS (client_seqno, client_id, cnt_year) VALUES (1000000,'LARGE CLIENT', 989992); 1 ROW inserted. SQL> CREATE OR REPLACE PACKAGE FORCE_HARD_PARSE_PKG IS gc_small CONSTANT NUMBER := 1; gc_middle CONSTANT NUMBER := 5; gc_large CONSTANT NUMBER := 9; gc_client_middle CONSTANT NUMBER := 50000; gc_client_large CONSTANT NUMBER := 500000; gc_daterange_middle CONSTANT NUMBER := 10; gc_daterange_large CONSTANT NUMBER := 50; FUNCTION FORCE_HARD_PARSE(in_schema VARCHAR2, in_object VARCHAR2) RETURN VARCHAR2; PROCEDURE SET_PREDICATE (n NUMBER); PROCEDURE SET_PREDICATES (p_daterange NUMBER DEFAULT NULL, p_clientrange NUMBER DEFAULT NULL); PROCEDURE CALC_PREDICATE; PROCEDURE CALC_PREDICATES(p_date_interval NUMBER DEFAULT 1, p_client_seqno NUMBER DEFAULT NULL, p_client_id VARCHAR2 DEFAULT NULL, p_client_seqno_list VARCHAR2 DEFAULT NULL ); END FORCE_HARD_PARSE_PKG; PACKAGE created. SQL> CREATE OR REPLACE PACKAGE BODY FORCE_HARD_PARSE_PKG IS g_predicate NUMBER; -- g_daterange || 0 || g_clientrange g_daterange NUMBER; -- 1 - small, 5 - middle, 9 - large g_clientrange NUMBER; -- 1 - small, 5 - middle, 9 - large -- FUNCTION FORCE_HARD_PARSE(in_schema VARCHAR2, in_object VARCHAR2) RETURN VARCHAR2 IS BEGIN IF NVL(g_predicate, 0) = 0 THEN RETURN NULL; ELSE RETURN TO_CHAR(g_predicate, 'TM') || ' = ' || TO_CHAR(g_predicate, 'TM'); END IF; END FORCE_HARD_PARSE; -- PROCEDURE SET_PREDICATE (n NUMBER) IS BEGIN g_predicate := n; END; PROCEDURE SET_PREDICATES (p_daterange NUMBER DEFAULT NULL, p_clientrange NUMBER DEFAULT NULL) IS BEGIN IF p_daterange IS NOT NULL THEN g_daterange := p_daterange; CALC_PREDICATE; END IF; IF p_clientrange IS NOT NULL THEN g_clientrange := p_clientrange; CALC_PREDICATE; END IF; END SET_PREDICATES; PROCEDURE CALC_PREDICATE IS BEGIN g_predicate := NVL(g_daterange, 0) * 100 + NVL(g_clientrange, 0); END CALC_PREDICATE; PROCEDURE CALC_PREDICATES (p_date_interval NUMBER DEFAULT 1, p_client_seqno NUMBER DEFAULT NULL, p_client_id VARCHAR2 DEFAULT NULL, p_client_seqno_list VARCHAR2 DEFAULT NULL) IS v_cnt NUMBER; BEGIN IF p_date_interval IS NOT NULL THEN g_daterange := CASE WHEN p_date_interval < gc_daterange_middle THEN gc_small WHEN p_date_interval < gc_daterange_large THEN gc_middle ELSE gc_large END; CALC_PREDICATE; END IF; IF COALESCE(p_client_seqno, p_client_id, p_client_seqno_list) IS NOT NULL THEN SELECT NVL(SUM(cnt_year), 0) AS cnt INTO v_cnt FROM CLIENTS_HP_STATISTICS t WHERE 1=1 AND (p_client_seqno IS NULL OR p_client_seqno = t.client_seqno) AND (p_client_id IS NULL OR p_client_id = t.client_id) AND (p_client_seqno_list IS NULL OR t.client_seqno IN (SELECT SUBSTR(s, CASE WHEN LEVEL > 1 THEN INSTR(s, ',', 1, LEVEL - 1 ) + 1 ELSE 1 END, INSTR(s, ',', 1, LEVEL) тАУ CASE WHEN LEVEL > 1 THEN INSTR(s, ',', 1, LEVEL тАУ 1) + 1 ELSE 1 END) FROM (SELECT p_client_seqno_list||',' AS s FROM DUAL) CONNECT BY INSTR(s, ',', 1, LEVEL) > 0)); g_clientrange := CASE WHEN v_cnt > gc_client_large THEN gc_large WHEN v_cnt > gc_client_middle THEN gc_middle ELSE gc_small END; CALC_PREDICATE; END IF; END CALC_PREDICATES; END FORCE_HARD_PARSE_PKG; PACKAGE BODY created. SQL> EXEC DBMS_RLS.ADD_POLICY (USER, 'HARD_PARSE_TABLE', 'HARD_PARSE_POLICY', USER, 'FORCE_HARD_PARSE_PKG.FORCE_HARD_PARSE', 'select'); PL/SQL PROCEDURE successfully completed. 

рдЕрдм, рдпрджрд┐ рд╣рдо рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдРрд╕реА рддрдХрдиреАрдХ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ HARD_PARSE_TABLE рдХреЛ рдХреНрд╡реЗрд░реА рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ (рдпрд╣ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛) рдФрд░ рдореБрдЦреНрдп рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ CALC_PREDICATES рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рддрдХрдиреАрдХ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдХреИрд╕реЗ рдмрджрд▓ рд╕рдХрддреА рд╣реИ:

 DECLARE p NUMBER; v NUMBER; BEGIN V := 0; p := 1000000; FORCE_HARD_PARSE_PKG.SET_PREDICATE(1000000); FOR rec IN (SELECT /*+query_hp1000000*/ * FROM VVP_HARD_PARSE_TEST, HARD_PARSE_TABLE WHERE c2 = p) LOOP V := v + 1; END LOOP; dbms_output.put_line(v); v := 0; p := 1; FORCE_HARD_PARSE_PKG.SET_PREDICATE(1); FOR rec IN (SELECT /*+query_hp1000000*/ * FROM VVP_HARD_PARSE_TEST, HARD_PARSE_TABLE WHERE c2 = p) LOOP V := v + 1; END LOOP; dbms_output.put_line(v); ----------------- V := 0; p := 1; FORCE_HARD_PARSE_PKG.SET_PREDICATE(1); FOR rec IN (SELECT /*+query_hp1*/ * FROM VVP_HARD_PARSE_TEST, HARD_PARSE_TABLE WHERE c2 = p) LOOP V := v + 1; END LOOP; dbms_output.put_line(v); v := 0; p := 1000000; FORCE_HARD_PARSE_PKG.SET_PREDICATE(1000000); FOR rec IN (SELECT /*+query_hp1*/ * FROM VVP_HARD_PARSE_TEST, HARD_PARSE_TABLE WHERE c2 = p) LOOP V := v + 1; END LOOP; dbms_output.put_line(v); END; 

рдЖрдЗрдП рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рджреЗрдЦреЗрдВ:

 SQL> SELECT sql_id, child_number, executions, plan_hash_value, sql_text, s.* FROM v$sql s WHERE sql_text LIKE 'SELECT % * FROM VVP_HARD_PARSE_TEST, HARD_PARSE_TABLE WHERE c2%' ORDER BY 1,2; SQL_ID CHILD_NUMBER EXECUTIONS PLAN_HASH_VALUE SQL_TEXT -------------------------------------------------------------------------------- 7wva3uqbgh4qf 0 1 1136240498 SELECT /*+query_hp1000000*/ * FROM VVP_HARD_PARSE_TEST, HARD_PARSE_TABLE WHERE C2 = :B1 7wva3uqbgh4qf 1 1 3246475190 SELECT /*+query_hp1000000*/ * FROM VVP_HARD_PARSE_TEST, HARD_PARSE_TABLE WHERE C2 = :B1 8cju3tfjvwm1p 0 1 3246475190 SELECT /*+query_hp1*/ * FROM VVP_HARD_PARSE_TEST, HARD_PARSE_TABLE WHERE C2 = :B1 8cju3tfjvwm1p 1 1 1136240498 SELECT /*+query_hp1*/ * FROM VVP_HARD_PARSE_TEST, HARD_PARSE_TABLE WHERE C2 = :B1 -- SQL> SELECT * FROM TABLE(dbms_xplan.display_cursor(sql_id => '7wva3uqbgh4qf', cursor_child_no => 0, format => 'basic +peeked_binds')); SELECT /*+query_hp1000000*/ * FROM VVP_HARD_PARSE_TEST, HARD_PARSE_TABLE WHERE C2 = :B1 PLAN hash VALUE: 1136240498 ---------------------------------------------------- | Id | Operation | Name | ---------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | MERGE JOIN CARTESIAN| | | 2 | TABLE ACCESS FULL | HARD_PARSE_TABLE | | 3 | BUFFER SORT | | | 4 | TABLE ACCESS FULL | VVP_HARD_PARSE_TEST | ---------------------------------------------------- Peeked Binds (IDENTIFIED BY position): -------------------------------------- 1 - :B1 (NUMBER): 1000000 -- SQL> SELECT * FROM TABLE(dbms_xplan.display_cursor(sql_id => '7wva3uqbgh4qf', cursor_child_no => 1, format => 'basic +peeked_binds')); SELECT /*+query_hp1000000*/ * FROM VVP_HARD_PARSE_TEST, HARD_PARSE_TABLE WHERE C2 = :B1 PLAN hash VALUE: 3246475190 -------------------------------------------------------------------- | Id | Operation | Name | -------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | MERGE JOIN CARTESIAN | | | 2 | TABLE ACCESS FULL | HARD_PARSE_TABLE | | 3 | BUFFER SORT | | | 4 | TABLE ACCESS BY INDEX ROWID| VVP_HARD_PARSE_TEST | | 5 | INDEX RANGE SCAN | IND_VVP_HARD_PARSE_TEST_C2 | -------------------------------------------------------------------- Peeked Binds (IDENTIFIED BY position): -------------------------------------- 1 - :B1 (NUMBER): 1 -- SQl> SELECT * FROM TABLE(dbms_xplan.display_cursor(sql_id => '8cju3tfjvwm1p', cursor_child_no => 0, format => 'basic +peeked_binds')); SELECT /*+query_hp1*/ * FROM VVP_HARD_PARSE_TEST, HARD_PARSE_TABLE WHERE C2 = :B1 PLAN hash VALUE: 3246475190 -------------------------------------------------------------------- | Id | Operation | Name | -------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | MERGE JOIN CARTESIAN | | | 2 | TABLE ACCESS FULL | HARD_PARSE_TABLE | | 3 | BUFFER SORT | | | 4 | TABLE ACCESS BY INDEX ROWID| VVP_HARD_PARSE_TEST | | 5 | INDEX RANGE SCAN | IND_VVP_HARD_PARSE_TEST_C2 | -------------------------------------------------------------------- Peeked Binds (IDENTIFIED BY position): -------------------------------------- 1 - :B1 (NUMBER): 1 -- SQL> SELECT * FROM TABLE(dbms_xplan.display_cursor(sql_id => '8cju3tfjvwm1p', cursor_child_no => 1, format => 'basic +peeked_binds')); SELECT /*+query_hp1*/ * FROM VVP_HARD_PARSE_TEST, HARD_PARSE_TABLE WHERE C2 = :B1 PLAN hash VALUE: 1136240498 ---------------------------------------------------- | Id | Operation | Name | ---------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | MERGE JOIN CARTESIAN| | | 2 | TABLE ACCESS FULL | HARD_PARSE_TABLE | | 3 | BUFFER SORT | | | 4 | TABLE ACCESS FULL | VVP_HARD_PARSE_TEST | ---------------------------------------------------- Peeked Binds (IDENTIFIED BY position): -------------------------------------- 1 - :B1 (NUMBER): 1000000 

рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ! рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╡реЗрд░реА рдХреЛ рджреЛ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрд╛рд▓ рдХрд░реНрд╕рд░ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рдеред рдкреИрд░рд╛рдореАрдЯрд░ C2 = 1,000,000 рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛрдиреЛрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдкреВрд░реНрдг рдЯреЗрдмрд▓ рд╕реНрдХреИрди рджреЗрдЦрддреЗ рд╣реИрдВ, рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ C1 = 1 рдХреЗ рд▓рд┐рдП рд╣рдо рд╣рдореЗрд╢рд╛ INDEX RANGE SCAN рджреЗрдЦрддреЗ рд╣реИрдВред

рдЕрдВрдд рдореЗрдВ рдореИрдВ рдмрд╛рд░рд┐рд╢ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди рджреЗрддрд╛ рд╣реВрдВред

тАЬрдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд░рд╡рд┐рд╡рд╛рд░ рдХреЛ рд╣рд░ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдПрдХ рдардВрдбрд╛ рдмреИрдХрдЕрдк рдерд╛ , рддрд╛рдХрд┐ рд╕реЛрдорд╡рд╛рд░ рд╕реБрдмрд╣ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░ рд╕рднреА рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ред рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдиреЗ рдЖрдорддреМрд░ рдкрд░ рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдкрдирд╛ рдХрд╛рдо рд╢реБрд░реВ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рд╕рдкреНрддрд╛рд╣ рдХреЗ рджреМрд░рд╛рди рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рдЕрдиреБрд░реЛрдз рдпреЛрдЬрдирд╛ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдмрд╛рд░рд┐рд╢ рд╣реЛ рд░рд╣реА рдереА, рддреЛ рдЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдкрдиреЗ рд╕реБрдмрд╣ рдХреЗ рдорд╛рд░реНрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдХрд╛рд░реНрдп рджрд┐рд╡рд╕ рдХреА рд╢реБрд░реБрдЖрдд рддрдХ рджреЗрд░ рд╣реЛ рдЧрдИ рдереАред рддрдм рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреА рдмреИрдЪ рдЧрдгрдирд╛ рдкрд╣рд▓реА рдмрд╛рд░ рд╢реБрд░реВ рд╣реБрдИ рдереА, рд▓реЗрдХрд┐рди рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░ рдХреЗ рдЕрдиреБрдЪрд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦрд░рд╛рдм рдереАред "

рдФрд░ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд╕рд┐рд╕реНрдЯрдо рджреГрд╢реНрдп:
тАв dba_tab_histograms, all_tab_histograms, user_tab_histograms
тАв v$vpd_policy
тАв v$sql_bind_capture
тАв dba_hist_sqlbind

Source: https://habr.com/ru/post/hi434444/


All Articles