Last update of this page: 2020-05-06
Date | Page | Description |
---|---|---|
2014-06-11 | 19 | Original sentence: The selectivity is a value between 0 and 1 representing the fraction of rows filtered by an operation. Corrected sentence: The selectivity is a value between 0 and 1 representing the fraction of rows that an operation returns. Reported by Charles Hooper. |
2014-06-11 | 24 | In Figure 2-3 two “boxes” contain the same text (Store parent cursor in library cache). The one at the top is right, the one at the bottom is wrong. It should be “Store child cursor in library cache”. Reported by Charles Hooper. |
2014-11-05 | 41 | In Figure 2-4 the arrows associated to the logical reads should be bi-directional (updated figure). Reported by Robert Koltai. |
2014-06-30 | 43 | Original sentence: Because of its success, having been ported to other programming languages like C++, .NET, Perl, and PHP. Corrected sentence: Because of its success, it has been ported to other programming languages like C++, .NET, Perl, and PHP. Reported by Ted Persky. |
2014-06-01 | 45/46 | The session_info.sql script was renamed. As written at page 46, its new name is session_attributes.sql. |
2015-08-10 | 57 | Original sentence: Warning: this happens only when the session_trace_enable procedure is used and at least one SQL statement has been executed by the session to be traced. Corrected sentence: Warning: up to and including 10.2.0.5 this happens only when the session_trace_enable procedure is used and at least one SQL statement has been executed by the session to be traced. Reported by Na Jangkeun. |
2014-08-20 | 62 | Original sentence: The ALTER SESSION privilege required to execute the previous trigger can’t be granted through a role. Instead, it has to be granted directly to the user executing the trigger. Corrected sentence: The ALTER SESSION privilege required to execute the previous trigger can’t be granted through a role. Instead, it has to be granted directly to the user creating the trigger. Reported by Charles Hooper. |
2014-07-20 | 73 | Original sentence: The number of executions itself is provided by the “Number of plan statistics captured” value. Corrected sentence: The number of execution plans itself is provided by the “Number of plan statistics captured” value. Reported by Charles Hooper. |
2014-07-06 | 106 | The query executed against v$osstat contains a wrong WHERE clause. Actually, no where clause should be present. Reported by Winston Zhang |
2014-07-06 | 111 | Original sentence: The following query, which was executed for the same session as the previous one, illustrates how produce a detailed resource usage profile for the processing carried out by a session Corrected sentence: The following query, which was executed for the same session as the previous one, illustrates how to produce a detailed resource usage profile for the processing carried out by a session Reported by Philipp Salvisberg |
2014-06-30 | 123 | Original sentence: Load map showing the top 5 SQL statement for the time period selected in Figure 4-5 Corrected sentence: Load map showing the top 5 SQL statements for the time period selected in Figure 4-5 Reported by Ted Persky. |
2014-06-30 | 126 | Original sentence: Whereas the dynamic performance views described in the last section provide only cumulated statistics about cursors, real-time monitoring provides information that describe how, over time, cursors are executed. Corrected sentence: Whereas the dynamic performance views described in the last section provide only cumulated statistics about cursors, real-time monitoring provides information that describes how, over time, cursors are executed. Reported by Ted Persky. |
2014-07-20 | 149 | Original sentence: Can you find out what happened and, as a result, prevent it from happenning again? Corrected sentence: Can you find out what happened and, as a result, prevent it from happening again? Reported by Charles Hooper. |
2014-10-04 | 169 | Original sentence: With the search_space.sql script I was able to reproduce 122 of them. Corrected sentence: With the search_space.sql script I was able to reproduce 157 of them. |
2014-10-04 | 179 | The sentence “Simple view Merging then eliminates the top-level query query block as well” is wrong. Simple view merging can’t take place. Reported by Giuseppe Difalco. |
2014-06-28 | 185 | Original sentence: In fact, without this query transformation, all component queries would be executed idependently before applying the set operator. Corrected sentence: In fact, without this query transformation, all component queries would be executed independently before applying the set operator. Reported by Na Jangkeun. |
2014-06-28 | 186 | Original sentence: Without this query transformation, both component queries would be executed idependently, and both tables would be accessed twice: Corrected sentence: Without this query transformation, both component queries would be executed independently, and both tables would be accessed twice: Reported by Na Jangkeun. |
2016-02-04 | 193 | Addenda: If you don’t have direct access to the aux_stats$ data dictionary table, you can use the get_system_stats procedure of the dbms_stats package instead. Since its utilization is not straightforward, the system_stats_get.sql Script script provides you an example of its utilization. |
2014-06-11 | 215 | Original sentence: This is especially true for multibyte character sets where each character might take up to three bytes. Corrected sentence: This is especially true for multibyte character sets where each character might take up to four bytes. Reported by Philipp Salvisberg. |
2014-07-06 | 215 | Original sentence: A row in available for each bucket in a view like user_tab_histograms. Corrected sentence: A row is available for each bucket in a view like user_tab_histograms. Reported by Philipp Salvisberg. |
2014-08-20 | 221 | Original sentence: For this reason, as of version 12.1, top frequency histograms and hybrid histograms replace height-balanced histograms. Corrected sentence: To avoid using them, as of version 12.1, top frequency histograms and hybrid histograms are available . Reported by Charles Hooper. |
2014-06-11 | 226/227 | It is not possible to create more than 20 extensions. If you try to create more than 20 extensions, the following error is raised:
ORA-20008: Number of extensions in table <table> already reaches the upper limit (20) |
2015-01-27 | 230 | Original sentence: The main issue of virtual columns, compared to extended statistics, is that they change the behavior of some SQL statements Corrected sentence: The main issue of virtual columns, except if they are defined as invisible (the visibility of virtual columns can be set as of version 12.1), compared to extended statistics, is that they change the behavior of some SQL statements Reported by Philipp Salvisberg. |
2014-08-20 | 239 | Original sentence: Also note that some features (top frequency histograms, hybrid histograms, and incremental statistics) only work when dbms_stats.auto_sample_size is specified. Corrected sentence: Also note that some features (top frequency histograms, hybrid histograms, and incremental statistics) require that dbms_stats.auto_sample_size is specified. Reported by Charles Hooper. |
2015-08-25 | 241 | Original sentence: For the columns that don’t explicitly specify a size_clause, the default size_clause (the first one) is used. Corrected sentence: For the columns that don’t explicitly specify a size_clause, the default size_clause (the one on the left in Figure 8-8) is used. Reported by Na Jangkeun. |
2014-11-05 | 244 | There is a sidebar (even though it doesn’t look like a sidebar, but it’s how Apress formats them) entitled CONCURRENT STATISTICS GATHERING that starts at page 243 and ends at page 244. Unfortunately, it doesn’t end at the right place. In addition, the bullet point that follows it is also (partially) wrongly formatted. To avoid misunderstandings, here are the published version and the corrected version of that part of the book. |
2014-08-20 | 282 | Original sentence: This level is available as of version 12.1 only. Corrected sentence: This level is available as of version 11.2.0.4 only. Reported by Charles Hooper. |
2015-03-24 | 295 | Original sentence: Setting the parameter to a value lower than the default, except for 0, isn’t possible. Corrected sentence: Setting the parameter to a value lower than the default, except in the initialization or server parameter file, isn’t possible. Reported by Bundit Jianpinitnan. |
2014-08-20 | 313 | Original sentence: The number of logical reads performed during the execution. Corrected sentence: The number of blocks accessed through logical reads during the execution. Reported by Charles Hooper. |
2014-08-20 | 313 | Original sentence: The number of physical reads performed during the execution. Corrected sentence: The number of blocks accessed through physical reads during the execution. Reported by Charles Hooper. |
2014-08-20 | 313 | Original sentence: The number of physical writes performed during the execution. Corrected sentence: The number of blocks accessed through physical writes during the execution. Reported by Charles Hooper. |
2017-01-26 | 315 | Original sentence: In this specific case, the access predicate is used to specify that the hash table in memory containing the data of the t1 table, whose hash key is t1.n, is probed with the values of column t2.n returned by accessing the t2 table (how hash joins work is described in detail in Chapter 14). Corrected sentence: In this specific case, the access predicate is used to specify that the hash table in memory containing the data of the t2 table, whose hash key is t2.n, is probed with the values of column t1.n returned by accessing the t1 table (how hash joins work is described in detail in Chapter 14). Reported by Vyacheslav Shablistyy. |
2017-01-26 | 315 | Original sentence: The index scan at line 4 accesses the t_pk index to look up the id column of the t1 table. Corrected sentence: The index scan at line 4 accesses the t2_pk index to look up the id column of the t2 table. Reported by Vyacheslav Shablistyy. |
2014-09-19 | 340 | Original sentence: With the value in the mgr column, operation 6 does a scan of the emp_mgr_i index by applying the “MGR”=PRIOR “EMPNO” access predicate (shown as “connect$_by$_pump$_002″.”PRIOR empno”=”MGR”), applies the filter predicate “MGR” IS NOT NULL, extracts the rowids, and returns them to its parent (5). Corrected sentence: With this value, operation 6 does a scan of the emp_mgr_i index by applying the “MGR”=PRIOR “EMPNO” access predicate (shown as “connect$_by$_pump$_002″.”PRIOR empno”=”MGR”), applies the filter predicate “MGR” IS NOT NULL, extracts the rowids, and returns them to its parent (5). Reported by Sigrid Keydana. |
2015-08-25 | 348 | Original sentence: Operation 3 joins the two sets of rows passed by operations 3 and 4. It passes the data to its parent (2) when at least one row is found. Corrected sentence: Operation 3 joins the two sets of rows passed by operations 4 and 5. It passes the data to its parent (2) when at least one row is found. Reported by Na Jangkeun. |
2014-12-02 | 353 | Add the following sentence before the Recognizing Inefficient Executioni Plans heading: “To control at the statement level whether an adaptive plan is used, as of 12.1.0.2 the (no_)adaptive_plan hints are available.” |
2014-12-22 | 360 | Original sentence: The first thing you have to do while questioning the performance of a SQL statement is verify which access structures are in place. Corrected sentence: The first thing you have to do while questioning the performance of a SQL statement is to verify which access structures are in place. Reported by Na Jangkeun. |
2014-08-20 | 365 | Original sentence: Syntactical errors in hints don’t raise errors. Corrected sentence: In general, syntactical errors in hints don’t raise errors. Reported by Charles Hooper. |
2015-03-09 | 370 | Original sentence: Because they aren’t part of the SQL statement during the parse, they can’t be numbered like the others. Corrected sentence: Because they aren’t part of the SQL statement, they can’t be numbered like the others. Reported by Na Jangkeun. |
2014-08-20 | 371 | Original sentence: While processing a SQL statement, the parser checks the syntax of the hints. In spite of this, no error is raised when a hint is found with invalid syntax. Corrected sentence: While processing a SQL statement, the parser checks the syntax of the hints. In spite of this, except for the oddly behaving change_dupkey_error_index, ignore_row_on_dupkey_index and retry_on_row_change hints, no error is raised when a hint is found with invalid syntax. Reported by Charles Hooper. |
2014-11-13 | 384 | The second UPDATE ol$hints SET ol_name = 'P_OUTLINE_EDITING' WHERE ol_name 'P_OUTLINE_EDITING_HINTED' statement has to be replaced by the following query: SELECT hint_text FROM ol$hints WHERE ol_name = 'P_OUTLINE_EDITING' Reported by Sangwoo Ryu |
2015-04-21 | 385 | Original sentence: The system privileges required to create, alter, and drop a stored outline are create any outline, drop any outline, and alter any outline, respectively. Corrected sentence: The system privileges required to create, alter, and drop a stored outline are create any outline, alter any outline, and drop any outline, respectively. Reported by Na Jangkeun. |
2015-04-22 | 397 | Original sentence: To create, alter, and drop a SQL profile, the create any sql profile, drop any sql profile, and alter any sql profile system privileges are required, respectively. Corrected sentence: To create, alter, and drop a SQL profile, the create any sql profile, alter any sql profile, and drop any sql profile system privileges are required, respectively. Reported by Na Jangkeun. |
2014-10-04 | 407 | The “SELECT /*+ full(t) */ count(pad) FROM t WHERE n = 42” query execute between the two “ALTER SESSION” statements has to be executed twice. Reported by Koltai Róbert. |
2015-04-26 | 413 | Original sentence: The following example shows how to find out, through the dba_advisor_executions view (note that also user and, as of version 12.1, cdb related views exist), when the last five executions took place, and how to display the report of one specific execution: Corrected sentence: The following example shows how to find out, through the dba_advisor_executions view (note that also user and, as of version 12.1, cdb related views exist), when the last three executions took place, and how to display the report of one specific execution: Reported by Na Jangkeun. |
2016-02-28 | 417 | Original sentence: Unused SQL plan baselines that don’t have the fixed attribute set to yes are automatically removed after a retention period. Corrected sentence: Unused SQL plan baselines that have the autopurge attribute set to yes are automatically removed after a retention period. Reported by Sangwoo Ryu. |
2014-08-20 | 428 | Original sentence: The aim of using a prepared statement is to share a single cursor for all SQL statements and, consequently, to avoid unnecessary hard parses by turning them into soft parses. Corrected sentence: The aim of using a prepared statement is to share a single cursor for all similar SQL statements (those that would have differed only by literals if bind variables weren’t used) and, consequently, to avoid unnecessary hard parses by turning them into soft parses. Reported by Charles Hooper. |
2015-03-26 | 430 | Original sentence: It’s important to notice how switching to prepared statements in test case 2 slightly increases the size of the messages received from the database engine. Corrected sentence: It’s important to notice how switching to prepared statements in test case 2 slightly increases the size of the messages received by the database engine. Reported by Na Jangkeun. |
2014-10-27 | 460 | Original sentence: After the reorganization, the query performs only 24 logical reads in order to return 40 rows: Corrected sentence: After the reorganization, the query performs only 23 logical reads in order to return 40 rows: Reported by Sangwoo Ryu. |
2014-12-02 | 465/466 | As of version 12.1.0.2, the PARTITION RANGE ITERATOR operation is also used for partition pruning based on zone maps. |
2015-04-15 | 468 | Original sentence: There are 18 because although the restriction applied to the n1 column causes partitions 25 to 37 to be accessed, the restriction applied to the d1 column causes partitions 1, 3, 15, 27, and 39 to be accessed (partition 1 is necessary in order to find out whether there are rows with the n1 column containing values less than 1) Corrected sentence: There are 18 because although the restriction applied to the n1 column causes partitions 25 to 37 to be accessed, the restriction applied to the d1 column causes partitions 1, 3, 13, 15, 25, 27, 37, and 39 to be accessed (the partitions 1, 13, 25 and 37 are necessary in order to find out whether there are rows with the n1 column containing values that aren’t specified as upper bound in the PARTITION BY RANGE clause) Reported by Na Jangkeun. |
2016-02-28 | 473 | The text of the query at the end of the page was truncated. Original query: SELECT * FROM tx, t WHERE tx.d1 = t.d1 AND tx.n1 = t.n1 AND t.n1 = 3 Corrected query: SELECT * FROM tx, t WHERE tx.d1 = t.d1 AND tx.n1 = t.n1 AND t.n1 = 3 AND tx.n2 = 42 Reported by Sangwoo Ryu. |
2014-07-06 | 478 | Original sentence: Inequality (!= or <>), NOT IN, IS NOT NULL conditions, and restrictions based on expressions and functions don’t lead to partition pruning. Corrected sentence: Inequality (for example, != or <>), NOT IN, IS NOT NULL conditions, and restrictions based on expressions and functions don’t lead to partition pruning. Reported by Philipp Salvisberg. |
2014-07-06 | 490 | Original sentence: That’s because the time needed to build the list of rowids is much smaller, both for B-tree and for bitmap indexes, than the time needed to access the table with them in such situations Corrected sentence: That’s because the number of logical reads needed to build the list of rowids is much smaller, both for B-tree and for bitmap indexes, than the number of logical reads needed to access the table with them in such situations Reported by Philipp Salvisberg. |
2014-07-06 | 540 | Original sentence: As discussed in the the previous section, if the selectivity of the inner loop is strong, using an index scan for the inner loop makes sense. Corrected sentence: As discussed in the previous section, if the selectivity of the inner loop is strong, using an index scan for the inner loop makes sense. Reported by Na Jangkeun. |
2014-06-28 | 548 | Original sentence: As a result, idependently of the access paths used to get data, no SORT JOIN operations are required. Corrected sentence: As a result, independently of the access paths used to get data, no SORT JOIN operations are required. |
2014-11-17 | 556 | Original sentence: The probe input is executed at most once. In the event the build input doesn’t return any row, the probe input isn’t executed at all. Corrected sentence: The probe input is executed at most once. In the event the build input doesn’t return any row and that no right outer or full outer join is used, the probe input isn’t executed at all. The hash_join_empty_build_input.sql script provides examples about this behavior. Reported by Na Jangkeun. |
2014-07-06 | 559 | Original sentence: Although the operation_id column is used to relate the work areas to an operation in the execution plan, the actual_mem_used column shows the size (in bytes), and the tempseg_size columns and tablespace give information about the utilization of temporary space: Corrected sentence: Although the operation_id column is used to relate the work areas to an operation in the execution plan, the actual_mem_used column shows the size (in bytes), and the tempseg_size and tablespace columns give information about the utilization of temporary space: Reported by Na Jangkeun. |
2014-07-06 | 569 | Original sentence: Therefore, I strongly recommend that you use use join conditions and, consequently, foreign keys and bitmap indexes based on a single column. Corrected sentence: Therefore, I strongly recommend that you use join conditions and, consequently, foreign keys and bitmap indexes based on a single column. Reported by Philipp Salvisberg. |
2014-07-20 | 589 | Original sentence: This method, called out-of-place refresh, makes sure that the impact on concurrent queries accessing the materialized is minimized. Corrected sentence: This method, called out-of-place refresh, makes sure that the impact on concurrent queries accessing the materialized view is minimized. Reported by Na Jangkeun. |
2014-06-01 | 611 | From 12.1 onward, the default value of the parallel_min_servers initialization parameter is “cpu_count * parallel_threads_per_cpu * 2”, and not 0 as written. |
2015-07-30 | 630 | Original text: In contrast to what happens with parallel queries, hints alone can’t enable parallel DML statements. In other words, parallel processing of DML statements must be absolutely enabled at the session level to take advantage of it. Corrected text: From version 12.1 onward, it’s also possible to enable and disable parallel DML statements with the enable_parallel_dml and disable_parallel_dml hints. In contrast to what happens with parallel queries, parallel and parallel_index hints alone can’t enable parallel DML statements. In other words, parallel processing of DML statements must be absolutely enabled either at the session level or at the SQL statement level to take advantage of it. |
2014-11-05 | 665 | Original sentence: This way, if you have determined that you’re are experiencing row migration, you should increase the current values of PCTFREE. Corrected sentence: This way, if you have determined that you’re experiencing row migration, you should increase the current values of PCTFREE. Reported by Na Jangkeun. |
2014-08-20 | 671 | Original sentence: The following example, based on the reserve_index.sql script, shows that the query optimizer no longer uses the index after rebuilding it with the REVERSE option Corrected sentence: The following example, based on the reverse_index.sql script, shows that the query optimizer no longer uses the index after rebuilding it with the REVERSE option Reported by Charles Hooper. |
2014-12-02 | 676 | Original sentence: Row-level locking isn’t supported; only whole logical compression units can be locked. Corrected sentence: Up to an including version 12.1.0.1, row-level locking isn’t supported. As of version 12.1.0.2, it’s possible to control whether row-level locking is used (per default it isn’t used). When row-level locking isn’t used, only whole logical compression units can be locked. |
[…] The following scripts are currently missing from the script library: — session_info.sql Pg 45 (in the script library as session_attributes.sql per the book author). — ash_top_files.sql, ash_top_objects.sql, and ash_top_plsql.sql Pg 136 — search_space.sql Pg 169 — incremental_stats.sql Pg 255 (Edit: Aug 22, 2014, now downloadable here) — copy_table_stats.sql Pg 256 (Edit: Aug 22, 2014, now downloadable here) — optimizer_index_cost_adj.sql Pg 288 (Edit: Aug 22, 2014, now downloadable here) — display_statspack.sql Pg 306 — dynamic_in_conditions.sql Pg 499 — fbi_cs.sql Pg 506 — reserve_index.sql should be reverse_index.sql Pg 671 (Edit: Aug 22, 2014, author now lists this item in the book’s errata page) […]
Hello Christian,
Regarding to pga_aggregate_LIMIT on page 295 (2nd edition), you mention the limit value of it is imposed by default (either 2GB, twice of pga_aggregate_target, or 3MBxprocesses).
Here are my comments
1. From your example trying to set 1GB in memory, it fails. However if setting as spfile and restart the database, it is fine though. The reference document at oracle is also mentioned about this, but giving a hint to avoid using lower than default.
2. I tried to set it (320 MB) using twice of pga_aggregate_TARGET (160 MB for example), once restart the database it bounces pga_aggregate_LIMIT from 320 MB to 512 MB. I have no idea on this, what do you think?
Best,
Bundit Jianpinitnan
Page 241
Fig. 8-7
Documentation shows syntax as:
FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]
The specification of size_clause is optional, but the figure shows it as being mandatory.
Fig. 8-8
Documentation shows syntax as:
FOR COLUMNS [size clause] column [size_clause] [,column [size_clause]…]
The specification of the first occurrence of size_clause is optional, but the figure shows it as being mandatory.
Hi Ted
Yes, you are right. But, I think that I avoided mentioning that part of the syntax by purpose. In fact, as you can read in footnote 2 “For simplicity, I’m not describing all the possibilities because many of them are redundant or of limited use in practice.”
FWIW, if you ask me right now (I don’t remember the actual decision that I took…), it’s probably because the default value used in case the size clause isn’t specified (size 75) is rather “strange”. My guess is that 75 is used because it is the default value used by ANALYZE.
Best,
Chris
Chris,
I think that commit; statements in the chapter02.session_attributes.sql script are not rrequired.
dbms_application_info uses pragma autonomus_transaction and does implicit commit.
The logic of such implementation is obvious – select or transaction control outside of the oracle code still able to use set procedures of the package.
Developers need to be forewarned.
P.S.
Hi
the commits are not there because of DBMS_APPLICATION_INFO, but because otherwise the trace file doesn’t contain all the information I wanted to show. Instead of commits I could have used another SQL statement. I (probably) chosen commit because it’s shorter to write, but somebody might misunderstand what I wanted to do. So, I’ll change that…
Best,
Chris
I uploaded a new version of the script.
Hi, Chris:
I’m not quite clear on the statement at the top of page 543,
“This type of execution plan is used only when either the outer loop or the inner loop is based on an index unique scan (here, the t1_n index is unique).”
However, then the following two examples show an INDEX RANGE SCAN on T1_N, instead of an INDEX UNIQUE SCAN.
Many thanks in advance.
Just noticed a typo on page 256. The word “synompses” should be rewritten as “synopses”.
Page 590.
1. More of a usage note, but I’ve rarely ever seen “content” referred to in the singular. If you agree, then
“… the content of the container table is reused …”
should read,
“… the contents of the container table are reused …”
and
“To display its content …”
should read,
“To display its contents …”
2. Typo.
“… only if it knowns them …”
should read,
“… only if it knows them …”
Hi Christian,
at the end of paragraph “Filter Push Down” (Page 179) you said “Simple view Merging then eliminates the top-level query query block as well”.
The subquery contains UNION operator. According to documentation and your Simple View Merging description this behaviour can’t happen.
Furthermore your Optimizer trace show at line 1175
SVM: SVM bypassed: SET (union, intersect, etc.) operator.
Am I wrong?
Regards.
Giuseppe.
Ciao Giuseppe, you are right. SVM can’t take place. Thank you for notifying it.
Hi Christian.
At the end of “Load from Library Cache” paragrapfh (pag. 409) you said “Note that the column shows the SQL plan name, not the SQL handle, as the
dbms_xplan package does”.
Both SQL_PLAN_BASELINE column in V$SQL and Note portion of DBMS_XPLAN.DISPLAY* output show the plan name used for a statement.
SQL Handle aren’t showed by DBMS_XPLAN.DISPLAY* function. Am I wrong?
Regards.
Ciao Giuseppe
> SQL Handle aren’t showed by DBMS_XPLAN.DISPLAY* function. Am I wrong?
No, you are right.
I don’t know why I added “, as the dbms_xplan package does” at the end. In fact, only display_sql_plan_baseline shows both of them.
Best,
Chris