Aug 17, 2007
Ok, so I have some horribly convuluted SQL that I would love to optomize. I'm not happy leaving it in it's current state, that's for sure!
I'm currently working on our test bed servers, so obviously my stats are out because of the "crap-ness" (yes, that's the technical term) of the hardware, but still, it should NEVER need to take this long!!
Basically, the issue arises in the nasty join to the career table (one employee can have multiple career lines). Just to make things complicated, employees can have any number of career records on any given date, these can even be input for future career events. The following SQL picks out the latest-current career date for each employee based on the career_date being <= GetDate() and the date of entry for this date being the greatest.
E.g.
career_date | datetime_created
2009-01-01 | 2006-05-05 13:55:21.000
2007-01-01 | 2006-05-05 13:54:18.000
2007-01-01 | 2006-05-05 13:52:55.000
From the above we want to return
2007-01-01 | 2006-05-05 13:54:18.000
SET STATISTICS IO ON
SET STATISTICS TIME ON
SELECT a.sAMAccountNameAs 'sAMAccountName'
, a.userPrincipalNameAs 'userPrincipalName'
, 'TRUE'As 'Modify'
, RTRIM(e.unique_identifier)As 'employeeID'
, RTRIM(e.employee_number)As 'employeeNumber'
, RTRIM(e.known_as)
+ CASE WHEN RTRIM(e.surname) IS NOT NULL THEN
' ' + RTRIM(e.surname) ELSE NULL ENDAs 'displayName'
, RTRIM(e.known_as)As 'givenName'
, RTRIM(e.surname)As 'sn'
, RTRIM(c.job_title)As 'title'
, RTRIM(c.division)As 'company'
, RTRIM(c.department)As 'department'
, RTRIM(l.description)As 'physicalDeliveryOfficeName'
, RTRIM(REPLACE(am.dn,'\',''))As 'manager'
, t.full_mobile
+ CASE WHEN RTRIM(t.mobile_number) IS NOT NULL THEN
' (DD: ' + RTRIM(t.mobile_number) + ')'ELSE NULL END
As 'mobile'
, t.mobile_numberAs 'otherMobile'
, ad.address_ad_countryAs 'c'
, ad.address_ad_address1
+ CASE WHEN ad.address_ad_address2 IS NOT NULL THEN
', ' + ad.address_ad_address2 ELSE NULL END
+ CASE WHEN ad.address_ad_address3 IS NOT NULL THEN
', ' + ad.address_ad_address3 ELSE NULL END
+ CASE WHEN ad.address_ad_address4 IS NOT NULL THEN
', ' + ad.address_ad_address4 ELSE NULL END
+ CASE WHEN ad.address_ad_address5 IS NOT NULL THEN
', ' + ad.address_ad_address5 ELSE NULL ENDAs 'streetAddress'
, ad.address_ad_poboxAs 'postOfficeBox'
, ad.address_ad_cityAs 'l'
, ad.address_ad_CountyAs 'st'
, ad.address_ad_postcodeAs 'postalCode'
, RTRIM(ad.address_ad_telephone) +
CASE WHEN RTRIM(a.othertelephone) IS NOT NULL
AND RTRIM(ad.address_ad_telephone) IS NOT NULL THEN
' (Ext: ' + RTRIM(a.othertelephone) + ')'
ELSE
CASE WHEN RTRIM(a.othertelephone) IS NOT NULL
AND RTRIM(ad.address_ad_telephone) IS NULL THEN
'Ext: ' + RTRIM(a.othertelephone)
ELSE NULL
END
ENDAs 'telephoneNumber'
FROM employee e
LEFT
JOIN career c
ON c.parent_identifier = e.unique_identifier
AND c.career_date =(
SELECTmax(c2.career_date)
FROMpwa_master.career c2
WHEREc2.parent_identifier = c.parent_identifier
ANDc2.career_date <= GetDate()
)
AND c.datetime_created =(
SELECT max(c3.datetime_created)
FROMpwa_master.career c3
WHEREc3.parent_identifier = c.parent_identifier
ANDc3.career_date = c.career_date
)
LEFT
OUTER
JOIN AD_Import am
ON am.employeeNumber = c.manager_number
INNER
JOIN AD_Import a
ON a.employeeID = e.unique_identifier
LEFT
JOIN AD_Telephone t
ON t.unique_identifier = e.unique_identifier
LEFT
JOIN AD_Address ad
ON ad.address_pwa_location = e.location
LEFT
JOIN xlocat l
ON l.code = c.location
WHERE (a.employeeNumber IS NOT NULL
OR a.employeeID IS NOT NULL)
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
(1706 row(s) affected)
Table 'AD_Import'. Scan count 4, logical reads 106, physical reads 0, read-ahead reads 0.
Table 'AD_Address'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0.
Table 'AD_Telephone'. Scan count 2, logical reads 10, physical reads 0, read-ahead reads 0.
Table 'Worktable'. Scan count 868, logical reads 956, physical reads 0, read-ahead reads 0.
Table 'xlocat'. Scan count 2, logical reads 8, physical reads 0, read-ahead reads 0.
Table 'career'. Scan count 5088, logical reads 2564843, physical reads 0, read-ahead reads 0.
Table 'people'. Scan count 1697, logical reads 5253, physical reads 0, read-ahead reads 0.
Table 'Worktable'. Scan count 826, logical reads 914, physical reads 0, read-ahead reads 0.
SQL Server Execution Times:
CPU time = 15203 ms, elapsed time = 8114 ms.
Any advice on what I can do to optomize?
Oh judt to point out that "employee" is a view on the "Table 'people'."
EDIT: I know it's pointing out the obvious, but I'm pulling out the managers "DN" from AD_Import based on the manager_number and employeeNumber matching.
View 14 Replies
View Related
Jan 13, 2008
Server Error in '/' Application.
Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. Stack Trace:
[InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.]
System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +1188873
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +105
System.Data.SqlClient.SqlConnection.Open() +111
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +413
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
LogDo.Log_Db_Save(String sjm, String k_sql, String bz) +438
LogDo.Log_Save(Exception e, String sql) +124
DataCaoZuo.Manage_ResultTB_Caozuo(String comstr) +145
Cls_UserManage.GetAllUserList() +18
Index.Page_Load(Object sender, EventArgs e) +83
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +34
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +47
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1061
Version Information: Microsoft .NET Framework Version:2.0.50727.832; ASP.NET Version:2.0.50727.832
View 1 Replies
View Related