:"SYS_B_XX" is an Oracle bind variable. Oracle strips all the literals and replaced them with bind variables because CURSOR_SHARING is set to SIMILAR or FORCE. This is ok. The Remedy SQL logs should be used to get the SQL statement with the literal values.
This could be a case where a user is searching for "%" simply to return all records. To Doug's point, the T28.C536870993 LIKE "SYS_B_67" part of your query is simply an inefficient query. It may try to return 1m rows or it may be performing a table scan. Fix that part of the query and the rest should be fine. Axton On Mon, Feb 28, 2011 at 11:56 AM, Mueller, Doug <[email protected]>wrote: > Vikram, > > Several observations about this command: > > First, this command seems to have been run through some kind of translator > that > has taken every string between "" symbols and replaced it with an > incrementing > string of SYS_B_xx where xx is an incrementing number. > > Because of this, it is a bit hard to assist with the question you ask > because > there is critical information in the query that you have masked out and > that > information may be the key to the solution. The most critical missing > piece of > data is whatever SYS_B_67 was originally. As you will see from the > remaining > notes, the rest of the strings really aren't important. > > 1) You comment on disallowing unqualified queries and say that this didn't > help > this query. Well, that option is not related as this is NOT an > unqualified > query. There is a qualification that is being specified by the person > who > is issuing this query. > > '536870993' LIKE "SYS_B_67" > > Now, the issue here is what is SYS_B_67. If it is really a search that > looks > something like the following > > %zzz% > > Then, you simply have a terribly inefficient query. You are searching in > a > character field for where some set of characters (zzz in my example) is > somewhere in the field. This requires a table scan to look at each > record > and the data in that field to see if the string matches. > > If it is really a search that looks more like > > zzz% > > Then, you can get an efficient search out of this. This is to find a > value > where the string STARTS with a set of characters (zzz in my example) and > has > other data after it. If like this, then indexes will be used in the > search > if there is an index on field 536870993. If there is no index on that > field > one could be added and will make a difference. REMEMBER, the search > cannot > have a leading % for the index to be useful. If there is a leading % > like in > the first example, the index will not be used even if present. > > There is no other qualifier that the customer is supplying to further > limit > the search so the entire indexing scheme hinges on this one field. > > 2) All the comparisons of field 112 to a value are things the AR System > adds > onto the search because you have a row level security field (field 112) > on > the form and you do not have global access to the entries, and the system > is > checking to see if you have access to rows it is retrieving. > > At first glance, the search is not efficient as it is a LIKE "%xxx%" type > search. So, if that was the only search criteria, it is correct, this > would > be an inefficient criteria. However, the design is for this to be an > ADDITIVE criteria, not the primary criteria. The primary criteria is the > search the user provides, this is just an additional test. In the role > of > additional test, efficiency is not significant as only one index can be > used > for a search. The row would already have been retrieved to apply this > criteria as additional qualification. > > So, the entire clause with Ored tests of field 112 can be discounted from > any > qualification you are trying to check performance of. > > Now, if that clause is the only clause in the WHERE, that means you have > allowed unqualified queries and someone is issuing an unqualified query > (which is a table scan). > > 3) Whoever the user is in this scenario is a member of 67 groups (SYS_B_00 > through SYS_B_66). This is a lot of groups for a single user to be a > member > of. Not disallowed, and the system will work and it does support that. > It > is just an observation that it is a large number. Typically, a user is a > member of a small number of groups and this clause is significantly > shorter. > > > > Hopefully, this gives you the information you need. What I really feel is > the > challenge here is that the user is qualifying field 536870993 to look for a > string ANYWHERE in the field and that is causing the problem. > > Solutions: > > 1) If this really should be an = instead of a LIKE "%zzz%", you may check > the > default QBE setting for the field and change it from Anywhere to Leading > or > Matching. The default QBE match criteria (a view property of the field) > is > Anywhere. So, a user may not be aware if they are using the query screen > and > putting in a value for that field what is happening. Changing the > definition will change the command issued. > > 2) If a user is doing this in a query bar, educate the user about the cost > of > this type of operation. > > 3) If workflow is issuing this command, determine whether the workflow > could > use a leading or equal search. > > 4) Is there other criteria you can use on some other field(s) on the form > to > help limit the scope of the rows that you need to search across? > > Of course, if what you need to do is a search for that string anywhere in > the > field AND there are no other criteria you can use to search other fields to > limit which rows are looked at, then you are stuck with the performance of > the > operation you need to perform. > > > Good luck with your situation and with finding a solution for long query. > > Doug Mueller > > -----Original Message----- > From: Action Request System discussion list(ARSList) [mailto: > [email protected]] On Behalf Of vikram_k > Sent: Monday, February 28, 2011 1:29 AM > To: [email protected] > Subject: Huge queries hogging up the database > > hi all, > > I had recently put some posts regarding AR Performance and I am thankful > that most of my problems are now resolved. But there is one issue which is > a > bottle neck I am seeing a huge oracle query like > > SELECT > > T28.C1,C600011000,C536870984,C536870913,C900106001,C901050057,C536871019,C900200400,C536870958,C536870950,C900170325,C536870935,C900100003,C536870929,C536870931,C536870914,C536871018,C536870938,C650000000,C536870952,C536871025,C536871038,C536900000,C536870912,C7,C900040206,C901092014,C900110076,C536870987,C901170021,C536870957 > FROM T28 > WHERE (((T28.C112 LIKE :"SYS_B_00") OR ((T28.C112 LIKE :"SYS_B_01") OR > ((T28.C112 LIKE :"SYS_B_02") OR ((T28.C112 LIKE :"SYS_B_03") OR ((T28.C112 > LIKE :"SYS_B_04") OR ((T28.C112 LIKE :"SYS_B_05") OR ((T28.C112 LIKE > :"SYS_B_06") OR ((T28.C112 LIKE :"SYS_B_07") OR ((T28.C112 LIKE > :"SYS_B_08") > OR ((T28.C112 LIKE :"SYS_B_09") OR ((T28.C112 LIKE :"SYS_B_10") OR > ((T28.C112 LIKE :"SYS_B_11") OR ((T28.C112 LIKE :"SYS_B_12") OR ((T28.C112 > LIKE :"SYS_B_13") OR ((T28.C112 LIKE :"SYS_B_14") OR ((T28.C112 LIKE > :"SYS_B_15") OR ((T28.C112 LIKE :"SYS_B_16") OR ((T28.C112 LIKE > :"SYS_B_17") > OR ((T28.C112 LIKE :"SYS_B_18") OR ((T28.C112 LIKE :"SYS_B_19") OR > ((T28.C112 LIKE :"SYS_B_20") OR ((T28.C112 LIKE :"SYS_B_21") OR ((T28.C112 > LIKE :"SYS_B_22") OR ((T28.C112 LIKE :"SYS_B_23") OR ((T28.C112 LIKE > :"SYS_B_24") OR ((T28.C112 LIKE :"SYS_B_25") OR ((T28.C112 LIKE > :"SYS_B_26") > OR ((T28.C112 LIKE :"SYS_B_27") OR ((T28.C112 LIKE :"SYS_B_28") OR > ((T28.C112 LIKE :"SYS_B_29") OR ((T28.C112 LIKE :"SYS_B_30") OR ((T28.C112 > LIKE :"SYS_B_31") OR ((T28.C112 LIKE :"SYS_B_32") OR ((T28.C112 LIKE > :"SYS_B_33") OR ((T28.C112 LIKE :"SYS_B_34") OR ((T28.C112 LIKE > :"SYS_B_35") > OR ((T28.C112 LIKE :"SYS_B_36") OR ((T28.C112 LIKE :"SYS_B_37") OR > ((T28.C112 LIKE :"SYS_B_38") OR ((T28.C112 LIKE :"SYS_B_39") OR ((T28.C112 > LIKE :"SYS_B_40") OR ((T28.C112 LIKE :"SYS_B_41") OR ((T28.C112 LIKE > :"SYS_B_42") OR ((T28.C112 LIKE :"SYS_B_43") OR ((T28.C112 LIKE > :"SYS_B_44") > OR ((T28.C112 LIKE :"SYS_B_45") OR ((T28.C112 LIKE :"SYS_B_46") OR > ((T28.C112 LIKE :"SYS_B_47") OR ((T28.C112 LIKE :"SYS_B_48") OR ((T28.C112 > LIKE :"SYS_B_49") OR ((T28.C112 LIKE :"SYS_B_50") OR ((T28.C112 LIKE > :"SYS_B_51") OR ((T28.C112 LIKE :"SYS_B_52") OR ((T28.C112 LIKE > :"SYS_B_53") > OR ((T28.C112 LIKE :"SYS_B_54") OR ((T28.C112 LIKE :"SYS_B_55") OR > ((T28.C112 LIKE :"SYS_B_56") OR ((T28.C112 LIKE :"SYS_B_57") OR ((T28.C112 > LIKE :"SYS_B_58") OR ((T28.C112 LIKE :"SYS_B_59") OR ((T28.C112 LIKE > :"SYS_B_60") OR ((T28.C112 LIKE :"SYS_B_61") OR ((T28.C112 LIKE > :"SYS_B_62") > OR ((T28.C112 LIKE :"SYS_B_63") OR ((T28.C112 LIKE :"SYS_B_64") OR > ((T28.C112 LIKE :"SYS_B_65") OR (T28.C112 LIKE > > :"SYS_B_66"))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) > AND (T28.C536870993 LIKE :"SYS_B_67")) ORDER BY :"SYS_B_68" ASC > > I was told to disallow unqualified search which I did and yet I am seeing > this kind of query. > > Can anyone help me understand what exactly is this query doing and what can > be done to avoid it... > > Thanks, > Vikram > -- > View this message in context: > http://old.nabble.com/Huge-queries-hogging-up-the-database-tp31030153p31030153.html > Sent from the ARS (Action Request System) mailing list archive at > Nabble.com. > > > _______________________________________________________________________________ > UNSUBSCRIBE or access ARSlist Archives at www.arslist.org > attend wwrug11 www.wwrug.com ARSList: "Where the Answers Are" > > > _______________________________________________________________________________ > UNSUBSCRIBE or access ARSlist Archives at www.arslist.org > attend wwrug11 www.wwrug.com ARSList: "Where the Answers Are" > _______________________________________________________________________________ UNSUBSCRIBE or access ARSlist Archives at www.arslist.org attend wwrug11 www.wwrug.com ARSList: "Where the Answers Are"

