Author |
Topic |
rerichards
Starting Member
10 Posts |
Posted - 2006-01-26 : 12:46:44
|
I have some users running an application against a SQL 2k enterprisedatabase with 4 CPU's. When multiple users execute tasks/queries in theapplication at the same time, it appears from a duration standpoint that theprocess is running serially against the database, where user #2's taskfinishes after User #1, and User #3 finishes after User #2.One of the queries being run (is a Select statement, no insert, update or delete) when pasted into Word is 27 pages, where nearly every line is an aggregate function. The tables referenced use the NoLock hint.Is there any way that it could still be locking the other select statements run at the same time, even though there is no data manipulation and the NoLock hint is being used?Sample of query:SELECT ol.KY_OPINION_CD_ID AS KY_OPINION_CD_ID, min(SKU_NOTE_2) AS SKU_NOTE_2, min(SKU_NOTE) AS SKU_NOTE, SKU_01 AS CURR_GROUP_CD, SKU_01 AS CURR_GROUP_TEXT, 'SKU_01' AS GROUP_ORDER_CD, COUNT(*) AS NUM_CHILDREN, '2559946|SKU' AS AGGR_NAME,2626210 AS AGGR_ID, Min(cs.KY_SKU_ID) AS KY_SKU_ID, Min(cs.KY_CUST_ID) as KY_CUST_ID, min(CUST_CD) AS CUST_CD, min(SKU_CD) AS SKU_CD, min(BUS_UNIT_CD) AS BUS_UNIT_CD,min(CUST_01) as CUST_01,min(CUST_02) as CUST_02,min(CUST_03) as CUST_03,min(CUST_04) as CUST_04,min(CUST_05) as CUST_05,min(CUST_06) as CUST_06,min(CUST_07) as CUST_07,min(CUST_08) as CUST_08,min(SKU_01) as SKU_01,min(SKU_02) as SKU_02,min(SKU_03) as SKU_03,min(SKU_04) as SKU_04,min(SKU_05) as SKU_05,min(SKU_06) as SKU_06,min(SKU_07) as SKU_07,min(SKU_08) as SKU_08,min(SKU_09) as SKU_09,min(SKU_10) as SKU_10,min(SKU_11) as SKU_11,min(SKU_12) as SKU_12,min(SKU_13) as SKU_13,min(SKU_14) as SKU_14,min(SKU_15) as SKU_15,min(SKU_16) as SKU_16,min(SKU_17) as SKU_17,min(SKU_18) as SKU_18,min(SKU_19) as SKU_19,min(SKU_20) as SKU_20,min(SKU_21) as SKU_21,min(SKU_22) as SKU_22,min(SKU_23) as SKU_23,min(SKU_24) as SKU_24,min(SKU_25) as SKU_25,min(SKU_26) as SKU_26,min(SKU_27) as SKU_27,min(SKU_28) as SKU_28,min(SKU_29) as SKU_29,min(SKU_30) as SKU_30,min(SKU_31) as SKU_31,min(SKU_32) as SKU_32,min(SKU_33) as SKU_33,min(SKU_34) as SKU_34,avg(SKU_AMT_01) as SKU_AMT_01,avg(SKU_AMT_02) as SKU_AMT_02,avg(SKU_AMT_03) as SKU_AMT_03,min(SKU_AMT_04) as SKU_AMT_04,avg(SKU_AMT_05) as SKU_AMT_05,min(SKU_DATE_01) as SKU_DATE_01,min(SKU_DATE_02) as SKU_DATE_02,min(SKU_DATE_03) as SKU_DATE_03,max(CUST_SKU_01) as CUST_SKU_01,min(CUST_SKU_02) as CUST_SKU_02,min(CUST_SKU_03) as CUST_SKU_03,min(CUST_SKU_04) as CUST_SKU_04,max(CUST_SKU_05) as CUST_SKU_05,min(CUST_SKU_06) as CUST_SKU_06,min(CUST_SKU_07) as CUST_SKU_07,min(CUST_SKU_08) as CUST_SKU_08,min(CUST_SKU_09) as CUST_SKU_09,min(CUST_SKU_10) as CUST_SKU_10,min(CUST_SKU_11) as CUST_SKU_11,min(CUST_SKU_12) as CUST_SKU_12,min(CUST_SKU_13) as CUST_SKU_13,min(CUST_SKU_14) as CUST_SKU_14,min(CUST_SKU_15) as CUST_SKU_15,From...Where...Group By... |
|
mcrowley
Aged Yak Warrior
771 Posts |
Posted - 2006-01-26 : 13:08:32
|
There should be no locking contention, especially between select statements. What you have here is a classic table scanner. If the table is huge (several million records), you may be seeing the merry-go-round scans, which was an improvement in SQL 7.0, I believe. Actually, I take that back, you would see this same behaviour, but worse with the merry-go-round scans. In a merry-go-round scan, each person table-scanning will piggy-back on the current scan, then go around to pick up from the beginning of the table to where he hopped on. Before they came up with this, each person started from the beginning, which caused all sorts of memory contention. |
 |
|
rerichards
Starting Member
10 Posts |
Posted - 2006-01-26 : 15:01:16
|
Any idea why it chooses to do the merry-go-round thing rather than running in parallel? |
 |
|
Norwich
Posting Yak Master
158 Posts |
Posted - 2006-01-27 : 11:11:39
|
It might be a Degree of Parallelism issue.As far as I know, having 4 Processors doesn't automatically mean that they process "in parallel" mode.Try specifying the degree of parallelism (DOP). You will force it to use the specified number of processorsLook up MaxDOP in Books OnLineThe revolution won't be televised! |
 |
|
|
|
|