Log in
::
Register
::
Not logged in
Home
Tags
Articles
Editorials
Stairways
Forums
Scripts
Videos
Blogs
QotD
Books
Ask SSC
SQL Jobs
Training
Authors
About us
Contact us
Newsletters
Write for us
Recent Posts
Recent Posts
Popular Topics
Popular Topics
Home
Search
Members
Calendar
Who's On
Home
»
SQL Server 2005
»
SQL Server 2005 Performance Tuning
»
Costly update trigger -70,000,000 logical...
39 posts, Page 4 of 4
««
«
1
2
3
4
Costly update trigger -70,000,000 logical reads for 30,000 rows updated!
Rate Topic
Display Mode
Topic Options
Author
Message
GilaMonster
GilaMonster
Posted Monday, February 02, 2009 10:56 AM
SSC-Dedicated
Group: General Forum Members
Last Login: Today @ 5:49 PM
Points: 37,671,
Visits: 29,925
Nested triggers means that an update to a table in a trigger can fire triggers on that table, providing it's not the same table. So, say you have Table1 that has an update trigger that inserts into table2. Table2 has an insert trigger that nserts into table3. If nested triggers is on and you update table1, then the trigger on table1 will insert into table2, will fire that trigger and will insert into tbl3. If it's off, the insert trigger on table2 won't fire.
Recursive trigger controls if a trigger may fire itself due to data changes. If it's off, your trigger will not be called due to the updates that it does.
Gail Shaw
Microsoft Certified Master: SQL Server 2008, MVP
SQL In The Wild
: Discussions on DB performance with occasional diversions into recoverability
We walk in the dark places no others will enter
We stand on the bridge and no one may pass
Post #648213
Marios Philippopoulos
Marios Philippopoulos
Posted Monday, February 02, 2009 10:59 AM
SSCommitted
Group: General Forum Members
Last Login: Tuesday, May 14, 2013 7:10 AM
Points: 1,824,
Visits: 3,477
GilaMonster (2/2/2009)
Nested triggers means that an update to a table in a trigger can fire triggers on that table, providing it's not the same table. So, say you have Table1 that has an update trigger that inserts into table2. Table2 has an insert trigger that nserts into table3. If nested triggers is on and you update table1, then the trigger on table1 will insert into table2, will fire that trigger and will insert into tbl3. If it's off, the insert trigger on table2 won't fire.
Recursive trigger controls if a trigger may fire itself due to data changes. If it's off, your trigger will not be called due to the updates that it does.
Thanks, so that means I'm OK from that aspect, ie. this trigger will not fire itself repeatedly, since my
db
setting is off.
That cleared it up.
From
http://msdn.microsoft.com/en-us/library/ms190739(SQL.90).aspx
An AFTER trigger does not call itself recursively unless the RECURSIVE_TRIGGERS database option is set.
__________________________________________________________________________________
Turbocharge Your Database Maintenance With Service Broker: Part 1
Real-Time Tracking of Tempdb Utilization Through Reporting Services
Monitoring Database Blocking Through SCOM 2007 Custom Rules and Alerts
Preparing for the Unthinkable - a Disaster/Recovery Implementation
Post #648219
TheSQLGuru
TheSQLGuru
Posted Monday, February 02, 2009 12:45 PM
Hall of Fame
Group: General Forum Members
Last Login: Today @ 3:08 PM
Points: 3,574,
Visits: 5,111
Other than the ol' trigger-firing-itself-due-to-update-inside-trigger-ploy, 2 other questions:
1) any OTHER triggers on this table?
2) is the join column a primary key or unique index value? Looks like cartesian product if not.
Best,
Kevin G. Boles
SQL Server Consultant
SQL MVP 2007-2012
TheSQLGuru at GMail
Post #648306
GilaMonster
GilaMonster
Posted Monday, February 02, 2009 12:50 PM
SSC-Dedicated
Group: General Forum Members
Last Login: Today @ 5:49 PM
Points: 37,671,
Visits: 29,925
TheSQLGuru (2/2/2009)
2) is the join column a primary key or unique index value? Looks like cartesian product if not.
Agreed. That's one reason I want see the actual exec plan, see what the row counts really are at various points of the query.
Gail Shaw
Microsoft Certified Master: SQL Server 2008, MVP
SQL In The Wild
: Discussions on DB performance with occasional diversions into recoverability
We walk in the dark places no others will enter
We stand on the bridge and no one may pass
Post #648313
Marios Philippopoulos
Marios Philippopoulos
Posted Monday, February 02, 2009 1:10 PM
SSCommitted
Group: General Forum Members
Last Login: Tuesday, May 14, 2013 7:10 AM
Points: 1,824,
Visits: 3,477
TheSQLGuru (2/2/2009)
Other than the ol' trigger-firing-itself-due-to-update-inside-trigger-ploy, 2 other questions:
1) any OTHER triggers on this table?
2) is the join column a primary key or unique index value? Looks like cartesian product if not.
Yes, that's the only trigger on this table.
The join column is a unique clustered primary key.
__________________________________________________________________________________
Turbocharge Your Database Maintenance With Service Broker: Part 1
Real-Time Tracking of Tempdb Utilization Through Reporting Services
Monitoring Database Blocking Through SCOM 2007 Custom Rules and Alerts
Preparing for the Unthinkable - a Disaster/Recovery Implementation
Post #648330
Marios Philippopoulos
Marios Philippopoulos
Posted Tuesday, February 03, 2009 4:23 AM
SSCommitted
Group: General Forum Members
Last Login: Tuesday, May 14, 2013 7:10 AM
Points: 1,824,
Visits: 3,477
Here is the "actual" exec plan obtained from a server-side trace (see attached).
__________________________________________________________________________________
Turbocharge Your Database Maintenance With Service Broker: Part 1
Real-Time Tracking of Tempdb Utilization Through Reporting Services
Monitoring Database Blocking Through SCOM 2007 Custom Rules and Alerts
Preparing for the Unthinkable - a Disaster/Recovery Implementation
Post Attachments
UpdTable_Trigger.zip
(
10 views,
2.93 KB
)
Post #648704
TheSQLGuru
TheSQLGuru
Posted Tuesday, February 03, 2009 8:42 AM
Hall of Fame
Group: General Forum Members
Last Login: Today @ 3:08 PM
Points: 3,574,
Visits: 5,111
Marios Philippopoulos (1/31/2009)
I have a trigger that appears to execute a very large number of logical reads; on one occasion it has hit 73,421,728 logical reads!
There are two puzzling aspects about this:
(1) Only about 30,000 rows are being updated in the base table (as can be seen in the exec plan)
(2) The dominant operator (86% of total workload) is an index seek on an index that contains a seemingly unrelated column (a column that does not appear anywhere in the trigger body).
I have captured the number of logical reads and the execution plan by polling the
sys.dm_db_exec_requests
DMV once a minute.
How can such a huge number of logical reads of the trigger be reconciled to the relatively modest number of rows updated in the underlying table?
Given the ACTUAL plan, I can't see what your issues are with the number of reads:
1) The clustered index update is 1.46M rows, NC index update 2.93M rows.
2) You are doing a table scan of 1.46M row inserted and 39.9M row updtable
3) You are hash matching the above
4) then doing a sort of the hash result
No idea where your statement of only updating 30K rows is coming from, but it is irrelevant. THAT query you gave the plan for is a beast and that is all there is to it. :)
Best,
Kevin G. Boles
SQL Server Consultant
SQL MVP 2007-2012
TheSQLGuru at GMail
Post #648915
Marios Philippopoulos
Marios Philippopoulos
Posted Tuesday, February 03, 2009 8:47 AM
SSCommitted
Group: General Forum Members
Last Login: Tuesday, May 14, 2013 7:10 AM
Points: 1,824,
Visits: 3,477
TheSQLGuru (2/3/2009)
Marios Philippopoulos (1/31/2009)
I have a trigger that appears to execute a very large number of logical reads; on one occasion it has hit 73,421,728 logical reads!
There are two puzzling aspects about this:
(1) Only about 30,000 rows are being updated in the base table (as can be seen in the exec plan)
(2) The dominant operator (86% of total workload) is an index seek on an index that contains a seemingly unrelated column (a column that does not appear anywhere in the trigger body).
I have captured the number of logical reads and the execution plan by polling the
sys.dm_db_exec_requests
DMV once a minute.
How can such a huge number of logical reads of the trigger be reconciled to the relatively modest number of rows updated in the underlying table?
Given the ACTUAL plan, I can't see what your issues are with the number of reads:
1) The clustered index update is 1.46M rows, NC index update 2.93M rows.
2) You are doing a table scan of 1.46M row inserted and 39.9M row updtable
3) You are hash matching the above
4) then doing a sort of the hash result
No idea where your statement of only updating 30K rows is coming from, but it is irrelevant. THAT query you gave the plan for is a beast and that is all there is to it. :)
It is a beast, no doubt.
The 30k-record number came from the estimated-plan info, which - clearly - is hugely inaccurate.
The developers have had enough of my whining, and they are eliminating the trigger alltogether.
They will embed the update code directly in the sprocs where the base table is itself updated.
__________________________________________________________________________________
Turbocharge Your Database Maintenance With Service Broker: Part 1
Real-Time Tracking of Tempdb Utilization Through Reporting Services
Monitoring Database Blocking Through SCOM 2007 Custom Rules and Alerts
Preparing for the Unthinkable - a Disaster/Recovery Implementation
Post #648922
noeld
noeld
Posted Tuesday, February 03, 2009 12:15 PM
SSCertifiable
Group: General Forum Members
Last Login: Tuesday, May 14, 2013 4:39 PM
Points: 6,260,
Visits: 1,977
They will embed the update code directly in the sprocs where the base table is itself updated.
WISE decision!
* Noel
Post #649189
« Prev Topic
|
Next Topic »
39 posts, Page 4 of 4
««
«
1
2
3
4
Permissions
You
cannot
post new topics.
You
cannot
post topic replies.
You
cannot
post new polls.
You
cannot
post replies to polls.
You
cannot
edit your own topics.
You
cannot
delete your own topics.
You
cannot
edit other topics.
You
cannot
delete other topics.
You
cannot
edit your own posts.
You
cannot
edit other posts.
You
cannot
delete your own posts.
You
cannot
delete other posts.
You
cannot
post events.
You
cannot
edit your own events.
You
cannot
edit other events.
You
cannot
delete your own events.
You
cannot
delete other events.
You
cannot
send private messages.
You
cannot
send emails.
You
may
read topics.
You
cannot
rate topics.
You
cannot
vote within polls.
You
cannot
upload attachments.
You
may
download attachments.
You
cannot
post HTML code.
You
cannot
edit HTML code.
You
cannot
post IFCode.
You
cannot
post JavaScript.
You
cannot
post EmotIcons.
You
cannot
post or upload images.
Copyright © 2002-2013 Simple Talk Publishing. All Rights Reserved.
Privacy Policy.
Terms of Use.
Report Abuse.