{"id":128,"date":"2009-03-03T20:36:00","date_gmt":"2009-03-03T18:36:00","guid":{"rendered":"http:\/\/antynet.pl\/index.php\/2009\/03\/03\/oracle-statistics\/"},"modified":"2010-08-24T22:41:40","modified_gmt":"2010-08-24T20:41:40","slug":"oracle-statistics","status":"publish","type":"post","link":"https:\/\/www.antynet.pl\/index.php\/2009\/03\/03\/oracle-statistics\/","title":{"rendered":"ORACLE STATISTICS"},"content":{"rendered":"<p>exec  DBMS_STATS.GATHER_SCHEMA_STATS('[username]&#8217;, cascade=>TRUE);<br \/>exec #dla tabeli wraz z indeksami DBMS_STATS.GATHER_TABLE_STATS('[username&#8217;,'[table_name]&#8217;,cascade=>TRUE); #dla ca\u0142ego schematu wraz z indeksami<\/p>\n<p>TIMED_STATISTICS = TRUE<\/p>\n<hr \/>\n<p>SELECT last_analysed FROM DBA_TABLES &#8211; data zbierania statystyk<\/p>\n<hr style=\"font-weight: bold;\" \/><span style=\"font-weight: bold;\">EXPLAIN PLAN<\/span><br \/>$oracle_home\/rdbms\/admin\/utlxplan.sql &#8211; tworzy tabel\u0119 PLAN_TABLE dla generowania plan\u00f3w poprzedzonych:<br \/>EXPLAIN PLAN SET STATEMENT_ID = '[nazwa]&#8217; FOR SELECT &#8230;<\/p>\n<hr \/>\n<p><span style=\"font-weight: bold;\">TRACE<br \/><\/span>TIMED_STATISTICS TRUE<span style=\"font-weight: bold;\"><br \/><\/span>ALTER SESSION SET SQL_TRACE = TRUE &#8211; generacja pliku \u015bladu dla zapyta\u0144(obci\u0105\u017ca baz\u0119),<br \/>kt\u00f3ry b\u0119dzie znajdowa\u0142 si\u0119 w katalogu;<br \/>show parameter UDUMP; (USER DUMP DEST) #uruchomiony przez usera<br \/>show parameter BDUMP; (BACKGROUND DUMP DEST) #uruchomiony przez proces t\u0142a<br \/>MAX_DUMP_FILE_SIZE #max rozmiar pliku<br \/>[instance_name]_[process_name]_[process_id].trc #tracefile format <\/p>\n<p>w\u0142\u0105czenie:<br \/>ALTER SESSION SET EVENTS '10046 trace name context forever, level 8&#8242;<\/p>\n<ul>\n<li>level 0 #wy\u0142\u0105czone<\/li>\n<li>level 1 #default<\/li>\n<li>level 4 #default + bind variable values<\/li>\n<li>level 8 #default + wait event information<\/li>\n<li>level 12 #level 4 + level 8<\/li>\n<\/ul>\n<p>wy\u0142\u0105czenie:<br \/>ALTER SESSION SET EVENTS '10046 trace name context off&#8217;<\/p>\n<p>w\u0142\u0105czenie dla innego usera;<br \/>ORADEBUG SETOSPID [nr z v$process];<br \/>ORADEBUG UNLIMIT;<br \/>ORADEBUG EVENT 10046 TRACE NAME CONTEXT FOREVER, LEVEL8;<br \/>wy\u0142\u0105czenie dla innego usera:<br \/>ORADEBUG EVENT 10046 TRACE NAME CONTEXT OFF;<\/p>\n<p><b>in 10g is available package DBMS_MONITOR: <\/b><br \/><b>&#8211; SESSION LEVEL<\/b><br \/>&#8211; turn on (level 8) <br \/>exec DBMS_MONITOR.SESSION_TRACE_ENABLE(<br \/>session_id => [sid],<br \/>serial_num => [serial],<br \/>waits => TRUE,<br \/>binds => FALSE);<br \/>&#8211; turn off:<br \/>exec DBMS_MONITOR.SESSION_TRACE_DISABLE(<br \/>session_id=> [sid],<br \/>serial_num=> [serial]);<br \/>&#8211; check:<br \/>SELECT sql_trace,sql_trace_waits,sql_trace_binds FROM v$session;<br \/><b>&#8211; DATABASE LEVEL<\/b><br \/>&#8211; turn on:<br \/>exec DBMS_MONITOR.DATABASE_TRACE_ENABLE(<br \/>waits => TRUE,<br \/>binds => TRUE,<br \/>instance_name > NULL);<br \/>&#8211; turn off:<br \/>exec DBMS_MONITOR.DATABASE_TRACE_ENABLE(<br \/>instance_name > NULL);<br \/>&#8211; check:<br \/>SELECT * FROM dba_enabled_traces;<br \/><b>&#8211; CLIENT LEVEL<\/b><br \/>&#8211; turn on:<br \/>exec DBMS_MONITOR.CLIENT_ID_TRACE_ENABLE(<br \/>client_id => 'client_name&#8217;,<br \/>waits => TRUE,<br \/>binds => FALSE);<br \/>&#8211; turn off:<br \/>exec DBMS_MONITOR.CLIENT_ID_TRACE_DISABLE(client_id => 'client_name&#8217;);<br \/>&#8211; check:<br \/>SELECT * FROM dba_enabled_traces;<br \/><b>&#8211; COMPONENT LEVEL (11g)<\/b><br \/>&#8211; turn on<b> :<\/b><br \/>exec DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE(service_name => 'serv_name&#8217;,<br \/>module_name => 'module&#8217;,<br \/>action_name => 'action&#8217;,<br \/>waits => TRUE,<br \/>binds => FALSE,<br \/>instance_name => NULL);<br \/>&#8211; turn off:<br \/>exec DBMS_MONITOR.SERV_MOD_TRACE_DISABLE(service_name => 'serv_name&#8217;,<br \/>module_name => 'module&#8217;,<br \/>action_name => 'action&#8217;,<br \/>instance_name => NULL)<br \/>&#8211; check:<br \/>SELECT * FROM dba_enabled_traces;<\/p>\n<p><b>TKPROF<\/b><br \/><span style=\"font-style: italic; font-weight: bold;\">! tkprof czyta pliki do 2GB<\/span><br \/>je\u017celi plik trace jest wi\u0119kszy ni\u017c 2GB nale\u017cy utworzy\u0107 plik fifo:<br \/>mkfifo [plik_fifo]<br \/>wywo\u0142a\u0107 komend\u0119 tkprof na pliku fifo:<br \/>TKPROF [plik_fifo] [output_file] &#8230;<br \/>przej\u015b\u0107 do innej konsoli i wywo\u0142a\u0107:<br \/>cat [plik_trace] > [plik_fifo]<\/p>\n<p>TKPROF [trace_file] [output_file] SORT=([option] if option sort is not set, order is similar as tracefile, many options means that TKPROF sums the value of the options) PRINT=[only with sort opition &#8211; limit number of SQL in output file] SYS=[no &#8211; dont list SQL executed by SYS user]<\/p>\n<p>options: <\/p>\n<table class=\"tbl\">\n<tbody>\n<tr>\n<td><b>PARSE<\/b><\/td>\n<td><b>EXEC<\/b><\/td>\n<td><b>FETCH<\/b><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>PRSCNT<\/td>\n<td>EXECNT<\/td>\n<td>FCHCNT<\/td>\n<td>number of times<\/td>\n<\/tr>\n<tr>\n<td>PRSCPU<\/td>\n<td>EXECPU<\/td>\n<td>FCHCPU<\/td>\n<td>CPU time spending<\/td>\n<\/tr>\n<tr>\n<td>PRSELA<\/td>\n<td>EXEELA<\/td>\n<td>FCHELA<\/td>\n<td>elapsed time spent<\/td>\n<\/tr>\n<tr>\n<td>PRSDSK<\/td>\n<td>EXEDSK<\/td>\n<td>FCHDSK<\/td>\n<td>number of disk physical reads<\/td>\n<\/tr>\n<tr>\n<td>PRSQRY<\/td>\n<td>EXEQRY<\/td>\n<td>FCHQRY<\/td>\n<td>number of buffers for consistent read<\/td>\n<\/tr>\n<tr>\n<td>PRSCU<\/td>\n<td>EXECU<\/td>\n<td>FCHCU<\/td>\n<td>number of buffers for current read<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>EXEROW<\/td>\n<td>FCHROW<\/td>\n<td>number of rows processed, fetched<\/td>\n<\/tr>\n<tr>\n<td>PRSMIS<\/td>\n<td>EXEMIS<\/td>\n<td>FCHMIS<\/td>\n<td>number of library cache misses<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>example:<br \/>tkprof ..\/db_ora_10196.trc db_ora_10196-1.txt sys=no sort=prsela,exeela,fchela<\/p>\n<p>dobre wyja\u015bnienie na <a href=\"http:\/\/ayyudba.blogspot.com\/2007\/11\/tkprof-interpretation.html\" target=\"_blank\" rel=\"nofollow noopener\">blogu<\/a><br \/>podane za <b>Oracle\u00ae Database Performance Tuning Guide<br \/>10<i>g<\/i> Release 2 (10.2)<\/b><span style=\"font-weight: bold;\"> <\/span>Part Number B14211-03:<\/p>\n<table border=\"1\" cellpadding=\"3\" cellspacing=\"0\" class=\"Formal\" dir=\"ltr\" frame=\"hsides\" rules=\"groups\" summary=\"This table explains the meaning of the CALL column values.\" title=\"CALL Column Values\">\n<thead>\n<tr align=\"left\" valign=\"top\">\n<th align=\"left\" id=\"r1c1-t14\" valign=\"bottom\">CALL Value<\/th>\n<th align=\"left\" id=\"r1c2-t14\" valign=\"bottom\">Meaning<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr align=\"left\" valign=\"top\">\n<td align=\"left\" headers=\"r1c1-t14\" id=\"r2c1-t14\"><code>PARSE<\/code><\/td>\n<td align=\"left\" headers=\"r2c1-t14 r1c2-t14\">Translates the SQL statement into an execution plan, including checks for proper security authorization and checks for the existence of tables, columns, and other referenced objects.<\/td>\n<\/tr>\n<tr align=\"left\" valign=\"top\">\n<td align=\"left\" headers=\"r1c1-t14\" id=\"r3c1-t14\"><code>EXECUTE<\/code><\/td>\n<td align=\"left\" headers=\"r3c1-t14 r1c2-t14\">Actual execution of the statement by Oracle. For <code>INSERT<\/code>, <code>UPDATE<\/code>, and <code>DELETE<\/code> statements, this modifies the data. For <code>SELECT<\/code> statements, this identifies the selected rows.<\/td>\n<\/tr>\n<tr align=\"left\" valign=\"top\">\n<td align=\"left\" headers=\"r1c1-t14\" id=\"r4c1-t14\"><code>FETCH<\/code><\/td>\n<td align=\"left\" headers=\"r4c1-t14 r1c2-t14\">Retrieves rows returned by a query. Fetches are only performed for <code>SELECT<\/code> statements.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/p>\n<table border=\"1\" cellpadding=\"3\" cellspacing=\"0\" class=\"Formal\" dir=\"ltr\" frame=\"hsides\" rules=\"groups\" summary=\"This table explains the meaning of the the trace statistics for parses, executes, and fetches.\" title=\"SQL Trace Statistics for Parses, Executes, and Fetches.\">\n<thead>\n<tr align=\"left\" valign=\"top\">\n<th align=\"left\" id=\"r1c1-t15\" valign=\"bottom\">SQL Trace Statistic<\/th>\n<th align=\"left\" id=\"r1c2-t15\" valign=\"bottom\">Meaning<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr align=\"left\" valign=\"top\">\n<td align=\"left\" headers=\"r1c1-t15\" id=\"r2c1-t15\"><code>COUNT<\/code><\/td>\n<td align=\"left\" headers=\"r2c1-t15 r1c2-t15\">Number of times a statement was parsed, executed, or fetched.<\/td>\n<\/tr>\n<tr align=\"left\" valign=\"top\">\n<td align=\"left\" headers=\"r1c1-t15\" id=\"r3c1-t15\"><code>CPU<\/code><\/td>\n<td align=\"left\" headers=\"r3c1-t15 r1c2-t15\">Total CPU time in seconds for all parse, execute, or fetch calls for the statement. This value is zero (0) if <code>TIMED_STATISTICS<\/code> is not turned on.<\/td>\n<\/tr>\n<tr align=\"left\" valign=\"top\">\n<td align=\"left\" headers=\"r1c1-t15\" id=\"r4c1-t15\"><code>ELAPSED<\/code><\/td>\n<td align=\"left\" headers=\"r4c1-t15 r1c2-t15\">Total elapsed time in seconds for all parse, execute, or fetch calls for the statement. This value is zero (0) if <code>TIMED_STATISTICS<\/code> is not turned on.<\/td>\n<\/tr>\n<tr align=\"left\" valign=\"top\">\n<td align=\"left\" headers=\"r1c1-t15\" id=\"r5c1-t15\"><code>DISK<\/code><\/td>\n<td align=\"left\" headers=\"r5c1-t15 r1c2-t15\">\nTotal number of data blocks physically read from the datafiles on disk for all parse, execute, or fetch calls.<\/td>\n<\/tr>\n<tr align=\"left\" valign=\"top\">\n<td align=\"left\" headers=\"r1c1-t15\" id=\"r6c1-t15\"><code>QUERY<\/code><\/td>\n<td align=\"left\" headers=\"r6c1-t15 r1c2-t15\">Total number of buffers retrieved in consistent mode for all parse, execute, or fetch calls. Usually, buffers are retrieved in <a href=\"http:\/\/www.blogger.com\/post-edit.g?blogID=2994295700369112559&amp;postID=5573397248053934459\" id=\"sthref1527\" name=\"sthref1527\" rel=\"nofollow noopener\" target=\"_blank\"><\/a>consistent mode for queries. Consistent mode czyli sp\u00f3jny tryb wszystkich danych dla SCN z kt\u00f3rego pochodzi statement, bufory pochodz\u0105ce z tego trybu obejmuj\u0105 te z undo, konieczne dla utrzymania stanu z tego samego SCN<\/td>\n<\/tr>\n<tr align=\"left\" valign=\"top\">\n<td align=\"left\" headers=\"r1c1-t15\" id=\"r7c1-t15\"><code>CURRENT<\/code><\/td>\n<td align=\"left\" headers=\"r7c1-t15 r1c2-t15\">Total number of buffers retrieved in <a href=\"http:\/\/www.blogger.com\/post-edit.g?blogID=2994295700369112559&amp;postID=5573397248053934459\" id=\"sthref1528\" name=\"sthref1528\" rel=\"nofollow noopener\" target=\"_blank\"><\/a>current mode. Buffers are retrieved in current mode for statements such as <code>INSERT<\/code>, <code>UPDATE<\/code>, and <code>DELETE<\/code>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/p>\n<table border=\"1\" cellpadding=\"3\" cellspacing=\"0\" class=\"Formal\" dir=\"ltr\" frame=\"hsides\" rules=\"groups\" summary=\"This table explains the meaning og the SQL Trace statistics for the ROWS column.\" title=\"SQL Trace Statistics for the ROWS Column\">\n<thead>\n<tr align=\"left\" valign=\"top\">\n<th align=\"left\" id=\"r1c1-t16\" valign=\"bottom\">SQL Trace Statistic<\/th>\n<th align=\"left\" id=\"r1c2-t16\" valign=\"bottom\">Meaning<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr align=\"left\" valign=\"top\">\n<td align=\"left\" headers=\"r1c1-t16\" id=\"r2c1-t16\"><code>ROWS<\/code><\/td>\n<td align=\"left\" headers=\"r2c1-t16 r1c2-t16\">Total number of rows processed by the SQL statement. This total does not include rows processed by subqueries of the SQL statement.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<p><span style=\"font-weight: bold;\">AUTOTRACE<\/span><br \/>[oracle_home]\/sqlplus\/admin\/plustrce.sql &#8211; skrypt do ustawienia roli PLUSTRACE potrzebnej do korzystania z AUTOTRACE<br \/>SET AUTOTRACE TRACEONLY | ON EXPLAIN | ON STATISTICS | ON EXPLAIN STATISTICS #bez wynik\u00f3w zapyta\u0144<br \/>SET AUTOTRACE ON EXPLAIN | ON STATISTICS | ON EXPLAIN STATISTICS #wraz z wynikami zapyta\u0144<br \/>SET AUTOTRACE OFF<\/p>\n<hr \/>\n<p><span style=\"font-weight: bold;\">ZBIERANIE STATYSTYK<\/span> (przestarza\u0142e)<br \/>utlbstat.sql &#8211; pocz\u0105tek (usuwanie tabel zawieraj\u0105cych kopie V$ i ponowne odtworzenie i zebranie tam nowych danych<br \/>utlestat.sql &#8211; koniec (generacja reportu report.txt<\/p>\n<hr style=\"font-weight: bold;\" \/><span style=\"font-weight: bold;\">STATSPACK<\/span><br \/>$oracle_home\/rdbms\/admin\/spcreate.sql &#8211; uruchamia poni\u017csze skrypty:<br \/>$oracle_home\/rdbms\/admin\/spcusr.sql &#8211; tworzenie usera PERFSTAT (log w spcusr.lis)<br \/>$oracle_home\/rdbms\/admin\/spctab.sql &#8211; tworzy tabele (log w spctab.lis)<br \/>$oracle_home\/rdbms\/admin\/spckg.sql &#8211; tworzy pakiety (log w spcpkg.sql)<br \/>EXECUTE STATSPACK.SNAP; &#8211; generacja migawki (punktu w kt\u00f3rym zbierane s\u0105 statystyki)<br \/>EXECUTE STATSPACEK.STATSPACK_MODIFY_PARAMETERS &#8211; zmiana parametr\u00f3w zbierania migawek<br \/>$oracle_home\/rdbms\/admin\/spreport.sql &#8211; generuje raport<br \/>$oracle_home\/rdbms\/admin\/spauto.sql &#8211; generuje joba dla migawek gdzie interwa\u0142:<br \/>SYSDATE+1 &#8211; raz dziennie<br \/>SYSDATE+1\/48 &#8211; raz na 1\/2 h<br \/>SYSDATE+1\/24 &#8211; raz na 1 h<br \/>$oracle_home\/rdbms\/admin\/sptrunc.sql &#8211; usuwanie zawarto\u015bci wszystkich tabel<br \/>$oracle_home\/rdbms\/admin\/sppurge.sql &#8211; usuwanie w\/g migawek<br \/>$oracle_home\/rdbms\/admin\/spdrp.sql &#8211; uruchamia poni\u017csze skrypty:<br \/>$oracle_home\/rdbms\/admin\/spdtab.sql &#8211; usuwa tabele i pakiety<br \/>$oracle_home\/rdbms\/admin\/spdusr.sql &#8211; usuwa usera PERFSTAT<\/p>\n<hr \/>\n<p><span style=\"font-weight: bold;\">DBMS_STATS<\/span><br \/>pakiet s\u0142u\u017cy do zbierania statystyk dla optymalizatora kosztowego wyzwalany przez GATHER_STATS_JOB<br \/>SELECT * FROM DBA_SCHEDULER_JOBS WHERE JOB_NAME = 'GATHER_STATS_JOB&#8217;; $oracle_home\/rdbms\/admin\/dbmsstat.sql &#8211; specyfikacja pakietu<br \/>$oracle_home\/rdbms\/admin\/prvtstat.plb &#8211; cia\u0142o pakietu<\/p>\n<div>\n<hr \/>\n<\/div>\n<p><\/p>\n<div>select *  from dba_hist_sql_plan where options=&#8217;FULL SCAN&#8217; and operation=&#8217;TABLE&#8217; and object_owner like  '%[user]%&#8217;;<\/div>\n","protected":false},"excerpt":{"rendered":"<p>exec DBMS_STATS.GATHER_SCHEMA_STATS('[username]&#8217;, cascade=>TRUE);exec #dla tabeli wraz z indeksami DBMS_STATS.GATHER_TABLE_STATS('[username&#8217;,'[table_name]&#8217;,cascade=>TRUE); #dla ca\u0142ego schematu wraz z indeksami TIMED_STATISTICS = TRUE SELECT last_analysed FROM DBA_TABLES &#8211; data zbierania statystyk EXPLAIN PLAN$oracle_home\/rdbms\/admin\/utlxplan.sql &#8211; tworzy tabel\u0119 PLAN_TABLE dla generowania plan\u00f3w poprzedzonych:EXPLAIN PLAN SET STATEMENT_ID = '[nazwa]&#8217; FOR SELECT &#8230; TRACETIMED_STATISTICS TRUEALTER SESSION SET SQL_TRACE = TRUE &#8211; generacja pliku \u015bladu [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[80],"tags":[46],"class_list":["post-128","post","type-post","status-publish","format-standard","hentry","category-oracle","tag-oracle-statistics"],"_links":{"self":[{"href":"https:\/\/www.antynet.pl\/index.php\/wp-json\/wp\/v2\/posts\/128","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.antynet.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.antynet.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.antynet.pl\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.antynet.pl\/index.php\/wp-json\/wp\/v2\/comments?post=128"}],"version-history":[{"count":1,"href":"https:\/\/www.antynet.pl\/index.php\/wp-json\/wp\/v2\/posts\/128\/revisions"}],"predecessor-version":[{"id":195,"href":"https:\/\/www.antynet.pl\/index.php\/wp-json\/wp\/v2\/posts\/128\/revisions\/195"}],"wp:attachment":[{"href":"https:\/\/www.antynet.pl\/index.php\/wp-json\/wp\/v2\/media?parent=128"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.antynet.pl\/index.php\/wp-json\/wp\/v2\/categories?post=128"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.antynet.pl\/index.php\/wp-json\/wp\/v2\/tags?post=128"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}