{"id":5858,"date":"2026-10-03T10:32:13","date_gmt":"2026-10-03T05:02:13","guid":{"rendered":"https:\/\/w3buddy.com\/blog\/?p=5858"},"modified":"2026-10-03T10:36:03","modified_gmt":"2026-10-03T05:06:03","slug":"oracle-database-performance-tuning-a-practical-dba-guide-to-awr-ash-addm-top-sql","status":"publish","type":"post","link":"https:\/\/w3buddy.com\/blog\/oracle-database-performance-tuning-a-practical-dba-guide-to-awr-ash-addm-top-sql\/","title":{"rendered":"Oracle Database Performance Tuning: A Practical DBA Guide to AWR, ASH, ADDM &#038; Top SQL"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">When an Oracle database becomes slow, the first question every DBA needs to answer is:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What is actually causing the performance problem?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Is it CPU?<br>Is it I\/O?<br>Is it a bad SQL query?<br>Is another session blocking the application?<br>Is there memory pressure?<br>Or is the problem somewhere outside the database?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of guessing, an Oracle DBA should follow a systematic troubleshooting approach.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this guide, we will learn how to troubleshoot Oracle Database performance using <strong>AWR, ASH, ADDM, wait events, Top SQL, and execution plans<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The examples are useful for Oracle Database 19c and newer environments, including Oracle AI Database 26ai.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">What Is Oracle Database Performance Tuning?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle Database performance tuning is the process of identifying the reason a database is taking too long to complete work and then making targeted changes to improve performance.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A simple performance-tuning process is:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Identify the problem \u2192 Collect evidence \u2192 Find the root cause \u2192 Apply the fix \u2192 Validate the result<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The most important part is to avoid making changes before understanding the problem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, if CPU utilization is high, increasing CPU may not solve the real problem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A single SQL statement performing unnecessary work could be responsible for most of the CPU usage.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Therefore, the first question should always be:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Why is the resource being consumed?<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Common Oracle Database Performance Problems<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle performance problems generally fall into a few common categories.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. High CPU Usage<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A database may become slow because the server is spending too much time processing CPU-intensive workload.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Common symptoms include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>High server CPU utilization<\/li>\n\n\n\n<li>High DB CPU<\/li>\n\n\n\n<li>SQL statements consuming excessive CPU<\/li>\n\n\n\n<li>Slow application response<\/li>\n\n\n\n<li>CPU-related wait activity<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The important question is:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Which SQL or workload is consuming the CPU?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Do not immediately increase CPU resources. First identify the workload responsible.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2. I\/O Bottleneck<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">An Oracle database can also become slow when sessions spend significant time waiting for disk or storage operations.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Common symptoms include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>High physical reads<\/li>\n\n\n\n<li>High I\/O wait time<\/li>\n\n\n\n<li>Slow queries<\/li>\n\n\n\n<li>Slow full table scans<\/li>\n\n\n\n<li>High storage latency<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">However, high I\/O does not always mean the storage system is the problem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A poorly designed SQL statement may read millions of blocks unnecessarily.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The real problem may therefore be the SQL execution plan rather than the storage itself.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3. Blocking and Lock Contention<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sometimes the database is not actually processing slowly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sessions may simply be waiting for another session to release a lock.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Session A\n   |\n   | Holds lock\n   \u2193\nTable \/ Row\n   \u2191\n   | Waiting\nSession B\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This can result in:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Application timeouts<\/li>\n\n\n\n<li>Long-running transactions<\/li>\n\n\n\n<li>Sessions appearing hung<\/li>\n\n\n\n<li>DML failures<\/li>\n\n\n\n<li>Lock-related wait events<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Before killing a session, understand which session is blocking whom and what transaction is involved.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4. High-Load SQL<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">One SQL statement can sometimes consume a significant amount of database resources.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A SQL statement may consume large amounts of:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CPU<\/li>\n\n\n\n<li>DB time<\/li>\n\n\n\n<li>Logical reads<\/li>\n\n\n\n<li>Physical reads<\/li>\n\n\n\n<li>I\/O<\/li>\n\n\n\n<li>Memory<\/li>\n\n\n\n<li>Concurrency resources<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Finding the SQL responsible is often one of the most important steps in Oracle performance troubleshooting.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Oracle Database Performance Troubleshooting Workflow<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">When an application team reports:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">&#8220;The Oracle database is slow.&#8221;<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">A practical DBA workflow is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Application reports slowness\n          \u2193\nIdentify the exact time period\n          \u2193\nCheck database health\n          \u2193\nCheck CPU \/ Memory \/ I\/O\n          \u2193\nReview ADDM\n          \u2193\nReview AWR\n          \u2193\nUse ASH for the specific time window\n          \u2193\nIdentify Top SQL\n          \u2193\nCheck the SQL execution plan\n          \u2193\nFind the root cause\n          \u2193\nApply a targeted fix\n          \u2193\nValidate the result\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This approach is much safer than randomly changing database parameters.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">What Is AWR in Oracle?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>AWR stands for Automatic Workload Repository.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">AWR collects and stores database performance information that can be used to analyze workload over time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">AWR data can include information about:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Database workload<\/li>\n\n\n\n<li>DB time<\/li>\n\n\n\n<li>CPU usage<\/li>\n\n\n\n<li>Wait events<\/li>\n\n\n\n<li>SQL statistics<\/li>\n\n\n\n<li>System statistics<\/li>\n\n\n\n<li>Time model statistics<\/li>\n\n\n\n<li>Active Session History information<\/li>\n\n\n\n<li>Object activity<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">AWR is especially useful when the performance problem happened in the past and is no longer occurring.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, suppose users reported that the application was slow between 10:00 AM and 12:00 PM.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can compare AWR snapshots covering that period and investigate what happened.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Important licensing note<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">AWR and other Diagnostic Pack features are subject to Oracle licensing requirements. Always verify the applicable Oracle licensing terms for your environment before using licensed functionality.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">How to Check AWR Snapshots<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">You can check available AWR snapshots using:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT snap_id,\n       begin_interval_time,\n       end_interval_time\nFROM dba_hist_snapshot\nORDER BY snap_id DESC;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You can then generate an AWR report using Oracle&#8217;s supplied script:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@?\/rdbms\/admin\/awrrpt.sql\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle will ask you for information such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Report type<\/li>\n\n\n\n<li>Number of days<\/li>\n\n\n\n<li>Begin Snapshot ID<\/li>\n\n\n\n<li>End Snapshot ID<\/li>\n\n\n\n<li>Report name<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Begin Snapshot: 1000\nEnd Snapshot:   1002\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This allows you to analyze the workload between those snapshots.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">How to Read an AWR Report<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">An AWR report contains a lot of information.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You do not need to read every section from top to bottom.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Start with the sections that answer one question:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Where is the database spending its time?<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Load Profile<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Load Profile provides a quick overview of database workload.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Important metrics include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>DB Time<\/li>\n\n\n\n<li>DB CPU<\/li>\n\n\n\n<li>Logical reads<\/li>\n\n\n\n<li>Physical reads<\/li>\n\n\n\n<li>Parses<\/li>\n\n\n\n<li>Executes<\/li>\n\n\n\n<li>Transactions<\/li>\n\n\n\n<li>User calls<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Look for unusual values and compare them with a normal period whenever possible.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2. Top Foreground Events<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The wait-event section helps you understand where foreground sessions are spending time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Event                              % DB Time\n------------------------------------------------\ndb file sequential read               35%\nCPU + Wait for CPU                    28%\nlog file sync                         15%\nenq: TX - row lock contention        10%\nOther                                 12%\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">These numbers are only an example.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The important point is that a wait event should not automatically be treated as the root cause.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A wait is often a symptom of another problem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>High physical reads\n        \u2193\nHigh I\/O waits\n        \u2193\nWhy are reads high?\n        \u2193\nInefficient SQL\n        \u2193\nPoor execution plan\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The DBA should follow the chain back to the root cause.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">What Is ASH in Oracle?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>ASH stands for Active Session History.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ASH provides sampled information about active database sessions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is particularly useful when the performance problem:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Happened for a short period<\/li>\n\n\n\n<li>Is intermittent<\/li>\n\n\n\n<li>Is happening right now<\/li>\n\n\n\n<li>Is difficult to identify from a larger AWR interval<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For example, suppose an application team reports:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">&#8220;The application was extremely slow between 10:32 AM and 10:37 AM.&#8221;<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of looking at an entire day&#8217;s workload, ASH can help you investigate that specific period.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">What Should You Look for in ASH?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Important ASH dimensions include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SQL ID<\/li>\n\n\n\n<li>Session<\/li>\n\n\n\n<li>User<\/li>\n\n\n\n<li>Wait event<\/li>\n\n\n\n<li>Wait class<\/li>\n\n\n\n<li>Instance<\/li>\n\n\n\n<li>Service<\/li>\n\n\n\n<li>Module<\/li>\n\n\n\n<li>Action<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Time       SQL_ID       Event\n-----------------------------------------\n10:32      8f3abc       db file sequential read\n10:33      8f3abc       db file sequential read\n10:34      8f3abc       CPU\n10:35      8f3abc       CPU\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now you have a useful starting point.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can investigate SQL ID <code>8f3abc<\/code> and determine why it was consuming resources.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">What Is ADDM?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>ADDM stands for Automatic Database Diagnostic Monitor.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ADDM analyzes AWR data and identifies significant database performance problems.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Depending on the environment and workload, ADDM can identify issues involving areas such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CPU<\/li>\n\n\n\n<li>I\/O<\/li>\n\n\n\n<li>High-load SQL<\/li>\n\n\n\n<li>Concurrency<\/li>\n\n\n\n<li>Memory<\/li>\n\n\n\n<li>Configuration<\/li>\n\n\n\n<li>Application workload<\/li>\n\n\n\n<li>RAC-related performance<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">ADDM can also provide recommendations.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, an ADDM recommendation should not automatically be implemented in production.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A DBA should validate the recommendation against the actual environment and business workload before making changes.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">AWR vs ASH vs ADDM<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">This is also a common Oracle DBA interview question.<\/p>\n\n\n\n<figure class=\"wp-block-table has-small-font-size\"><table><thead><tr><th>Tool<\/th><th>Main Purpose<\/th><\/tr><\/thead><tbody><tr><td>AWR<\/td><td>Historical database performance information<\/td><\/tr><tr><td>ASH<\/td><td>Active session activity and specific time-window analysis<\/td><\/tr><tr><td>ADDM<\/td><td>Automated analysis of AWR data<\/td><\/tr><tr><td>Top SQL<\/td><td>Identify SQL consuming significant resources<\/td><\/tr><tr><td>Execution Plan<\/td><td>Understand how SQL is being executed<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">An easy way to remember:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>AWR \u2192 What happened?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>ASH \u2192 What was happening during a specific period?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>ADDM \u2192 What performance problems did Oracle identify?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Top SQL \u2192 Which SQL consumed the resources?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Execution Plan \u2192 How was that SQL executed?<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Finding Top SQL in Oracle<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Once you know that SQL is responsible for the performance problem, identify the SQL ID.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT *\nFROM (\n    SELECT sql_id,\n           executions,\n           ROUND(elapsed_time \/ 1000000, 2) AS elapsed_seconds,\n           ROUND(cpu_time \/ 1000000, 2) AS cpu_seconds,\n           buffer_gets,\n           disk_reads\n    FROM v$sql\n    ORDER BY elapsed_time DESC\n)\nWHERE ROWNUM &lt;= 20;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This provides a starting point for identifying SQL statements with high total elapsed time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, do not automatically assume that the SQL with the highest total elapsed time is always the statement that needs immediate attention.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Consider:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Total elapsed time<\/li>\n\n\n\n<li>Average elapsed time<\/li>\n\n\n\n<li>Number of executions<\/li>\n\n\n\n<li>CPU consumption<\/li>\n\n\n\n<li>Logical reads<\/li>\n\n\n\n<li>Physical reads<\/li>\n\n\n\n<li>Business importance<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SQL A\nExecutions:   1\nElapsed time: 30 minutes\n\nSQL B\nExecutions:   500,000\nElapsed time: 20 minutes\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">SQL B may deserve significant investigation because it runs a very large number of times.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Always interpret SQL statistics in context.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Check the SQL Execution Plan<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">After identifying a problematic SQL statement, examine its execution plan.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A useful command is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT *\nFROM TABLE(\n    DBMS_XPLAN.DISPLAY_CURSOR(\n        'YOUR_SQL_ID',\n        NULL,\n        'ALLSTATS LAST'\n    )\n);\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Replace <code>YOUR_SQL_ID<\/code> with the actual SQL ID.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Look for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Full table scans<\/li>\n\n\n\n<li>Unexpected join methods<\/li>\n\n\n\n<li>Incorrect row estimates<\/li>\n\n\n\n<li>Large differences between estimated and actual rows<\/li>\n\n\n\n<li>Excessive rows processed<\/li>\n\n\n\n<li>Poor access paths<\/li>\n\n\n\n<li>Large sorts<\/li>\n\n\n\n<li>Excessive logical reads<\/li>\n\n\n\n<li>Excessive physical reads<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">But remember:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A full table scan is not automatically a problem.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If Oracle needs to read a large percentage of a table, a full table scan may be the appropriate access method.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The goal is not to eliminate every full table scan.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The goal is to determine whether the execution plan is appropriate for the workload.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">One of the Most Important Oracle DBA Rules<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Never tune based on a single symptom.<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">High CPU<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">does not automatically mean:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Increase CPU<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Similarly:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">High physical reads<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">does not automatically mean:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Increase buffer cache<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">High waits<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">does not automatically mean:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Change a database parameter<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead, follow this approach:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Symptom\n   \u2193\nCollect evidence\n   \u2193\nAnalyze the workload\n   \u2193\nIdentify root cause\n   \u2193\nApply targeted fix\n   \u2193\nValidate\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This mindset is one of the most important skills for an Oracle DBA.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Example: Troubleshooting a Slow SQL Query<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose an application report normally takes 2 minutes but suddenly takes 20 minutes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Identify the Time Period<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">First determine exactly when the problem occurred.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Problem window:<br>10:00 AM \u2013 10:20 AM<br><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Check ADDM<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Look for significant findings reported during the affected period.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Check AWR<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Review:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>DB Time<\/li>\n\n\n\n<li>DB CPU<\/li>\n\n\n\n<li>Wait events<\/li>\n\n\n\n<li>Top SQL<\/li>\n\n\n\n<li>Load Profile<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Check ASH<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use ASH to identify active sessions and SQL IDs during the exact problem window.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose you identify:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SQL_ID = 4m7abc123<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Check the Execution Plan<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT *\nFROM TABLE(\n    DBMS_XPLAN.DISPLAY_CURSOR(\n        '4m7abc123',\n        NULL,\n        'ALLSTATS LAST'\n    )\n);\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose you find:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Estimated rows: 100<br>Actual rows:    5,000,000<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That difference is an important clue.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can then investigate:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Optimizer statistics<\/li>\n\n\n\n<li>Data distribution<\/li>\n\n\n\n<li>SQL predicates<\/li>\n\n\n\n<li>Bind variables<\/li>\n\n\n\n<li>Indexes<\/li>\n\n\n\n<li>Join conditions<\/li>\n\n\n\n<li>Execution plan changes<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Apply a Targeted Fix<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Only after identifying the root cause should you make a production change.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The appropriate fix depends on what the investigation shows.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Step 7: Validate the Result<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">After implementing the fix, measure the performance again.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before:<br>Elapsed time = 20 minutes<br><br>After:<br>Elapsed time = 2 minutes<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Performance tuning is not complete until the improvement has been measured and validated.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Useful Oracle Performance SQL Queries<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">1. Check Database Time Model<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT stat_name,\n       ROUND(value \/ 1000000, 2) AS seconds\nFROM v$sys_time_model\nWHERE stat_name IN (\n    'DB CPU',\n    'DB time'\n);\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2. Find SQL With High Elapsed Time<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT *\nFROM (\n    SELECT sql_id,\n           executions,\n           ROUND(elapsed_time \/ 1000000, 2) AS elapsed_seconds,\n           ROUND(cpu_time \/ 1000000, 2) AS cpu_seconds,\n           buffer_gets,\n           disk_reads\n    FROM v$sql\n    ORDER BY elapsed_time DESC\n)\nWHERE ROWNUM &lt;= 20;\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3. Find SQL With High CPU Usage<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT *\nFROM (\n    SELECT sql_id,\n           executions,\n           ROUND(cpu_time \/ 1000000, 2) AS cpu_seconds,\n           buffer_gets,\n           disk_reads\n    FROM v$sql\n    ORDER BY cpu_time DESC\n)\nWHERE ROWNUM &lt;= 20;\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4. Check Active Sessions<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT sid,\n       serial#,\n       username,\n       status,\n       event,\n       wait_class,\n       sql_id\nFROM v$session\nWHERE status = 'ACTIVE'\nORDER BY sid;\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Common Oracle DBA Performance Tuning Mistakes<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Mistake 1: Immediately Changing SGA or PGA<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Do not change memory parameters simply because the database is slow.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">First establish whether memory is actually the bottleneck.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Mistake 2: Killing Sessions Without Investigation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A session may be blocking other sessions, but killing it can cause:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Transaction rollback<\/li>\n\n\n\n<li>Application errors<\/li>\n\n\n\n<li>Business impact<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Identify the blocker and understand the transaction before taking action.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Mistake 3: Assuming Every Problem Is a Database Problem<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Performance issues can exist at multiple layers:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Application\n     \u2193\nSQL\n     \u2193\nDatabase\n     \u2193\nStorage\n     \u2193\nNetwork\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The DBA should identify the affected layer instead of automatically assuming the database is responsible.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Mistake 4: Tuning SQL Without Checking the Execution Plan<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Changing SQL or adding indexes without understanding the execution plan can make performance worse.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Always investigate before making changes.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Mistake 5: Looking Only at Averages<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A database may look healthy over an entire day while experiencing a severe five-minute performance incident.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is one reason ASH and targeted time-window analysis are valuable.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Oracle RAC Performance Troubleshooting<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">In an Oracle RAC environment, always consider whether the problem affects one instance or the entire cluster.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instance 1 \u2192 Normal<br>Instance 2 \u2192 High CPU<br>Instance 3 \u2192 Normal<br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A problem may therefore be isolated to a particular instance, service, SQL workload, or resource.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">RAC troubleshooting may require investigation of:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Instance<\/li>\n\n\n\n<li>Service<\/li>\n\n\n\n<li>SQL ID<\/li>\n\n\n\n<li>Wait events<\/li>\n\n\n\n<li>Global Cache activity<\/li>\n\n\n\n<li>Interconnect<\/li>\n\n\n\n<li>Hot blocks<\/li>\n\n\n\n<li>CPU<\/li>\n\n\n\n<li>I\/O<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A RAC performance problem should not automatically be treated as a database-wide problem.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Oracle Database 26ai and Performance Troubleshooting<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle AI Database 26ai is the current long-term-support release of Oracle Database.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">While 26ai is well known for its AI and vector capabilities, Oracle has also introduced improvements across database administration and performance management.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle continues to enhance capabilities around workload analysis and performance monitoring.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For DBAs, this makes traditional skills such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWR analysis<\/li>\n\n\n\n<li>ASH analysis<\/li>\n\n\n\n<li>SQL tuning<\/li>\n\n\n\n<li>Wait-event analysis<\/li>\n\n\n\n<li>Execution-plan analysis<\/li>\n\n\n\n<li>Root-cause troubleshooting<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">still highly relevant in modern Oracle environments.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Oracle DBA Performance Tuning Checklist<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">When someone says:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>&#8220;Oracle Database is slow.&#8221;<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Work through this checklist.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Database Health<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Is the database available?<\/li>\n\n\n\n<li>Are required services running?<\/li>\n\n\n\n<li>Are there unusual alerts?<\/li>\n\n\n\n<li>Are sessions increasing unexpectedly?<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">CPU<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Is CPU saturated?<\/li>\n\n\n\n<li>Is DB CPU high?<\/li>\n\n\n\n<li>Which SQL is consuming CPU?<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Memory<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Is there memory pressure?<\/li>\n\n\n\n<li>Is PGA usage unusually high?<\/li>\n\n\n\n<li>Are there memory-related findings?<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">I\/O<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Are physical reads high?<\/li>\n\n\n\n<li>Are I\/O wait events significant?<\/li>\n\n\n\n<li>Is storage latency normal?<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Sessions<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Are there blocking sessions?<\/li>\n\n\n\n<li>Are sessions waiting?<\/li>\n\n\n\n<li>Are there abnormal connection spikes?<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">SQL<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Which SQL consumes the most DB time?<\/li>\n\n\n\n<li>Which SQL consumes the most CPU?<\/li>\n\n\n\n<li>Which SQL performs excessive reads?<\/li>\n\n\n\n<li>Has the execution plan changed?<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">AWR<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>What changed during the problem period?<\/li>\n\n\n\n<li>What are the major wait events?<\/li>\n\n\n\n<li>Which SQL statements dominate DB time?<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">ASH<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>What was happening during the exact incident?<\/li>\n\n\n\n<li>Which SQL IDs were active?<\/li>\n\n\n\n<li>Which sessions were waiting?<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">ADDM<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>What problems did Oracle identify?<\/li>\n\n\n\n<li>Do the recommendations match the evidence?<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Validation<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Did the change improve performance?<\/li>\n\n\n\n<li>Did it create another problem?<\/li>\n\n\n\n<li>Can the improvement be measured?<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">The Oracle Performance Tuning Formula<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">A simple way to remember the complete process is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Don't Guess\n     \u2193\nCollect Data\n     \u2193\nFind DB Time\n     \u2193\nIdentify Waits\n     \u2193\nFind Top SQL\n     \u2193\nCheck Execution Plan\n     \u2193\nFind Root Cause\n     \u2193\nApply Targeted Fix\n     \u2193\nValidate\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Final Thoughts<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Oracle performance tuning is not about memorizing hundreds of initialization parameters.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is about knowing <strong>how to investigate a problem systematically<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When a production database becomes slow, do not immediately change:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SGA<\/li>\n\n\n\n<li>PGA<\/li>\n\n\n\n<li>Optimizer parameters<\/li>\n\n\n\n<li>Indexes<\/li>\n\n\n\n<li>Database parameters<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Start with evidence.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use <strong>ADDM<\/strong> to understand diagnosed performance problems.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use <strong>AWR<\/strong> to analyze historical workload.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use <strong>ASH<\/strong> to investigate active sessions and specific time periods.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use <strong>Top SQL<\/strong> to identify resource-intensive SQL.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use <strong>execution plans<\/strong> to understand how SQL is being executed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then make a targeted change and measure the result.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The most important rule for an Oracle DBA is simple:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Find the evidence first. Fix the root cause second.<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">If you follow this approach consistently, you can troubleshoot many Oracle performance problems without relying on guesswork.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Learn Oracle Database performance tuning using AWR, ASH, ADDM, Top SQL and execution plans. A practical guide to troubleshooting CPU, I\/O, locks and slow SQL.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"googlesitekit_rrm_CAowu461DA:productID":"","footnotes":""},"categories":[1225],"tags":[],"class_list":["post-5858","post","type-post","status-publish","format-standard","hentry","category-database"],"_links":{"self":[{"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/posts\/5858","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/comments?post=5858"}],"version-history":[{"count":2,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/posts\/5858\/revisions"}],"predecessor-version":[{"id":5861,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/posts\/5858\/revisions\/5861"}],"wp:attachment":[{"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/media?parent=5858"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/categories?post=5858"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/tags?post=5858"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}