Submitted by dmann on Mon, 01/04/2010 - 15:25
I came across a situation where the profiler.sql supplied with Metalink Doc: 243755.1 was giving some incomplete results. Because some of my PL/SQL code was executing very quickly it was rounding down to 0.00 and not even showing up on the 'Top 10' section.
Throughout profiler.sql there are timing numbers (unit = sends) that are rounded to 2 places. Looking in the comments for profiler.sql I noticed the last update was early 2007. Maybe Moore's law and CPU power has caught up with profiler.sql but I would recommend increasing the granularity of the script by doing the following:
Submitted by dmann on Thu, 12/31/2009 - 14:27
If you are experimenting with gathering system statistics it might be helpful to archive your current settings and any intermediate settings you come up with along the way.
There is a way to save stats to a table using DBMS_STATS.CREATE_STAT_TABLE and gathering with DBMS_STATS.GATHER into that table, but the format is cryptic and it is nice to have the descriptive parameter names tagging along with the data. (In a future post I will cover format of the CREATE_STAT_TABLE format).
The current system stats info is held in the sys.aux_stats$ table. Since the format is a little wacky, I came up with the following table to hold stats and the following insert statement to populate it after every gathering of system stats.
Now you can easily query the values of old stats in the SYSTEM_STATS_HISTORY table:
Submitted by dmann on Tue, 12/29/2009 - 14:33
# Written by : David Mann @ http://ba6.us
# Script Name : alldatafiles.sh
# Description : Provides list of all datafiles for each running database on
# on a machine
echo "INSTANCE_NAME, FILE_NAME"
# Step through running instances
ps -ef | grep ora_smon_ | grep -v grep | cut -b61-70 | while read LINE
# Assign the ORACLE_SID
Submitted by dmann on Wed, 12/09/2009 - 16:45
If you ever used the Solaris ps -ef command to view programs that are running you may not always see the arguments the original program was started with. This command usually shows about 80 characters.
Try the following commands, they usually give you more information about the command that started the process running. Depending on the patch level of your OS you may see 200 characters or more.
Submitted by dmann on Tue, 12/01/2009 - 22:54
I ran across Orion in a Kevin Closson blog post. From the OTN site:
"ORION (Oracle I/O Calibration Tool) is a standalone tool for calibrating the I/O performance for storage systems that are intended to be used for Oracle databases. The calibration results are useful for understanding the performance capabilities of a storage system, either to uncover issues that would impact the performance of an Oracle database or to size a new database installation. Since ORION is a standalone tool, the user is not required to create and run an Oracle database. "
Submitted by dmann on Wed, 11/25/2009 - 11:53
As I get deeper into tuning with Statistics and the CBO I have been paying a lot more attention to hints.
In the past I always tried to avoid hints. After working with the CBO and staistics in recent versions I believe they are necessary at times to give guidance to the CBO.
The Oracle Database SQL Language Reference has a comprehensive list of hints included in the documentation of SQL Comments. The list for 11g is available here: link
Submitted by dmann on Tue, 11/24/2009 - 15:51
I have been making use of the GATHER_PLAN_STATISTICS hint more and more lately. In the interest of getting the most accurate data I usually log in as the user that normally executes the query. These are usually non-privileged accounts that just have access to their own objects.
In order to use DBMS_XPLAN.DISPLAY_CURSOR in a session that does not have DBA or SELECT CATALOG ROLE, grant the following permissions to them:
SQL> GRANT SELECT ON V_$SESSION TO &&MYUSER;
SQL> GRANT SELECT ON V_$SQL TO &&MYUSER;
Submitted by dmann on Wed, 11/18/2009 - 11:52
For the past few weeks I have been using the TriVaDis eXtended Tracefile Analysis Tool as a replacement for TKPROF.
TKPROF is available with all Oracle installations but is has some drawbacks. Early versions of TKPROF do not provide any information about bind variables. It also tends to lose detail because it aggregates data. When performing analysis it is unwise to make inferences about detailed execution based on aggregates. TVD$XTAT provides aggregates but also provides detail on each SQL Statement so you can zero in on the statement of interest.
Submitted by dmann on Tue, 10/13/2009 - 10:09
I was recently looking for old (not ancient, just old) install media to support a database migration. The usual collection of download links on OTN usually just has the last 2 releases. If you need older versions (in this case 9i) then hit up the EDelivery site and you should be able to find them.
If you need a much older version (like 8i or gasp! 7) I have heard you may be able to obtain it through an SR if you have a current support contract but luckily I have not had to test that route.
Submitted by dmann on Tue, 08/11/2009 - 12:46
On Oracle-L there was a recent discussion about detecting block corruption.
One suggestion was to do an Export to /dev/null. While this may get you 95% of the way there it is mainly relying on side effects of data access to detect any issues. If blocks are cached then it might not root out physical corruption.