Which query is best?

  • From: Syed Jaffar Hussain <sjaffarhussain@xxxxxxxxx>
  • To: Oracle-L Freelists <oracle-l@xxxxxxxxxxxxx>
  • Date: Tue, 15 Dec 2009 10:22:16 +0300

Hi everyone,

The following simple join query on one of our business critical RAC
databases with two instances was frequently leading into a dead lock
situation ultimately a causing database hang scenario:

SELECT u.u_user_id, u..u_mcr_cust_id
FROM table1 U,table2 A
WHERE
A.UCS_CHNL_ID = :b1 AND A.UCS_LOGIN_NAME = :b2 AND A.UCS_USER_ID =
U.U_USER_ID FOR UPDATE

execution plan as follows:

| Id  | Operation                     | Name                          |
Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |
|       |       |     3 (100)|          |
---------------------------------------------------------------------------------------------------------------
|   1 |  FOR UPDATE                   |
|       |       |            |          |
|   2 |   NESTED LOOPS                |                               |
1 |    43 |     3   (0)| 00:00:01 |
|   3 |    TABLE ACCESS BY INDEX ROWID| table1       |     1 |    27 |
2   (0)| 00:00:01 |
|   4 |     INDEX UNIQUE SCAN         | USER_CHANNEL_SUBSCRIPTION_FK4 |
1 |       |     1   (0)| 00:00:01 |
|   5 |    TABLE ACCESS BY INDEX ROWID| table1                        |
11883 |   185K|     1   (0)| 00:00:01 |
|   6 |     INDEX UNIQUE SCAN         | table1_PK                     |
1 |       |     0   (0)|          |
---------------------------------------------------------------------------------------------------------------

--
Best Regards,

Syed Jaffar Hussain

Other related posts: