September 14, 2017 at 12:36 am
Hi there,
We have users in the field who use a mobile web GIS application (using Java) which use forms to edit/update spatial data.
There is one particular table that occasionally locks up for hours and nobody can edit or insert either via this application, the desktop GIS or SQL Server.
We can't even disable a trigger on this table. Everything times out/freezes. There is plently of memory, no errors in the log, no locks to be found and everything looks fine but it isn't.
It generally just starts working after a few hours but sometimes we reboot the server SQL Server is running on.
Any ideas of how to troubleshoot this type of situation? Has anyone had a similar problem?
Thanks,
Josh
September 14, 2017 at 2:22 am
Can you post all the relevant DDL for the table, indices, triggers etc. and also the relevant database settings?
September 14, 2017 at 2:23 am
joshua.james.1979 - Thursday, September 14, 2017 12:36 AMHi there,We have users in the field who use a mobile web GIS application (using Java) which use forms to edit/update spatial data.
There is one particular table that occasionally locks up for hours and nobody can edit or insert either via this application, the desktop GIS or SQL Server.
We can't even disable a trigger on this table. Everything times out/freezes. There is plently of memory, no errors in the log, no locks to be found and everything looks fine but it isn't.
It generally just starts working after a few hours but sometimes we reboot the server SQL Server is running on.Any ideas of how to troubleshoot this type of situation? Has anyone had a similar problem?
Thanks,
Josh
Time outs are also symptoms of stale statistics . Check if the stats are updated . What strategy do you follow for stats maintenance ?
September 14, 2017 at 4:52 am
You mentioned "edit/update spatial data."
And then you said "no locks".
Sorry, it cannot be true.
It simply not possible.
UPDATEs always incure locks. Always.
Even if you have (NOLOCK) hint in the statement - it's ignored and exclusive locks are applied anyway.
What you describe appears to be a deadlocking issue.
And, quite possible, due to the way Java tools access the data, you may have deadlocking on schema.
I would suggest to look for BEGIN TRANSACTION instructions in Java.
If a connection with explicit transaction executed an update statement and failed to COMMIT (lost connection, timed out, etc.) then the locks will be held forever, until all open connections are rolled back due to the server restart.
Look for locks, X and Sch-M ones in particular.
_____________
Code for TallyGenerator
September 14, 2017 at 5:01 am
Try using the 1222 traceflag to get any deadlock information into the error log
DBCC TRACEON(1222,-1)
September 14, 2017 at 5:16 pm
The index scan looks ok, the estimated number of rows is exactly the same count as actual number of rows.
Now when I say it is a Java application, it is Geomedia Smart Client, which the user connects with a JNLP. This contains a few Java plugins but the overall application is delivered through a web HTTP connection.
What's the easiest way to get the DDL's? Is sp_help 'table' enough?
Thanks,
Josh
September 15, 2017 at 2:18 am
September 15, 2017 at 6:43 am
joshua.james.1979 - Thursday, September 14, 2017 5:16 PMThe index scan looks ok, the estimated number of rows is exactly the same count as actual number of rows.
Now when I say it is a Java application, it is Geomedia Smart Client, which the user connects with a JNLP. This contains a few Java plugins but the overall application is delivered through a web HTTP connection.
What's the easiest way to get the DDL's? Is sp_help 'table' enough?Thanks,
Josh
Still waiting for the basic information: "Can you post all the relevant DDL for the table, indices, triggers etc. and also the relevant database settings?"
Without the information, anything posted will be pure speculations!
Did you enable the TF 1222?
September 15, 2017 at 8:06 am
Sergiy - Thursday, September 14, 2017 4:52 AMUPDATEs always incure locks. Always.Even if you have (NOLOCK) hint in the statement - it's ignored and exclusive locks are applied anyway.
All statements issue some sort of locks, even if it's a share mode lock. The way NOLOCK works is that the statement with the hint still takes out locks on the rows / pages / tables being queried, but this statement ignores locks held by other sessions statements.
https://www.mssqltips.com/sqlservertip/2470/understanding-the-sql-server-nolock-hint/
September 15, 2017 at 10:16 am
joshua.james.1979 - Thursday, September 14, 2017 5:16 PMThe index scan looks ok, the estimated number of rows is exactly the same count as actual number of rows.
Now when I say it is a Java application, it is Geomedia Smart Client, which the user connects with a JNLP. This contains a few Java plugins but the overall application is delivered through a web HTTP connection.
What's the easiest way to get the DDL's? Is sp_help 'table' enough?Thanks,
Josh
What they are looking for is the code required to re-generate the table and its structure. So, if you can script out the table and triggers and post that here, we can try to help.
As for a few other things you can check, when it gets stuck like that, you can run DBCC OPENTRAN (while connected to the database) to see a list of open transactions. More information about DBCC OPENTRAN can be found here: https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-opentran-transact-sql
using DBCC OPENTRAN along with EXEC sp_who2 can help find out which connection is causing the blocking if it is due to a stuck transaction.
If it is due to a deadlock, then traceflag 1222 (as Eirikur Eiriksson pointed out) will be helpful.
The above is all just my opinion on what you should do.
As with all advice you find on a random internet forum - you shouldn't blindly follow it. Always test on a test server to see if there is negative side effects before making changes to live!
I recommend you NEVER run "random code" you found online on any system you care about UNLESS you understand and can verify the code OR you don't care if the code trashes your system.
September 17, 2017 at 4:58 pm
Ok, here is the table creation script.
CREATE TABLE [dbo].[AREG_GMSC](
[GMSC_Key] [int] IDENTITY(1,1) NOT NULL,
[Txn_Date] [datetime] NULL,
[Date_Processed_MPSC] [datetime] NULL,
[ID_COUNTER] [int] NULL,
[ADDRESS1] [nvarchar](90) NULL,
[ADDRESS2] [nvarchar](90) NULL,
[ADDRESS3] [nvarchar](90) NULL,
[LOCALITY] [nvarchar](90) NULL,
[ASSET_DESCRIPTION] [nvarchar](90) NULL,
[ASSET_NAME] [nvarchar](66) NULL,
[COMMENT] [nvarchar](255) NULL,
[CONDITION] [float] NULL,
[CONTROL] [nvarchar](50) NULL,
[DATEINSP] [datetime] NULL,
[DATEINST] [datetime] NULL,
[FEATURE] [nvarchar](55) NULL,
[INSPECTOR] [nvarchar](50) NULL,
[JOBNO] [int] NULL,
[MAPREF] [nvarchar](7) NULL,
[MATERIAL] [nvarchar](50) NULL,
[MPSNO] [nvarchar](50) NULL,
[PHOTOCODE] [nvarchar](255) NULL,
[POLETYPE] [nvarchar](50) NULL,
[TYPE] [nvarchar](60) NULL,
[TYPE2] [nvarchar](60) NULL,
[TYPE3] [nvarchar](60) NULL,
[HEIGHT] [float] NULL,
[LENGTH] [float] NULL,
[WIDTH] [float] NULL,
[float] NULL,
[COVER] [float] NULL,
[DEPTH] [float] NULL,
[DISPOSED] [bit] NULL,
[DISPOSAL_DATE] [datetime] NULL,
[DWG_NO] [nvarchar](50) NULL,
[DEBTYPE] [nvarchar](255) NULL,
[ABAND] [bit] NULL,
[ACCESS] [nvarchar](255) NULL,
[ACTION] [nvarchar](255) NULL,
[FLOW] [bit] NULL,
[LIDTYPE] [nvarchar](50) NULL,
[VERIFIED] [bit] NULL,
[VER_COMM] [nvarchar](50) NULL,
[PIT_NO] [nvarchar](55) NULL,
[PIT_SIZE] [nvarchar](255) NULL,
[BACKFILL] [nvarchar](255) NULL,
[BACKEND_ERROR_TYPE] [int] NULL,
[US_PIT2] [int] NULL,
[DIA_WIDTH] [float] NULL,
[Geometry] [varbinary](max) NULL,
[STATUS] [smallint] NULL,
[STATUS_COMMENT] [nvarchar](max) NULL,
[PARENT_NUMBER] [nvarchar](50) NULL,
[CHILD_G1] [nvarchar](50) NULL,
[CHILD_G2] [nvarchar](50) NULL,
[Geometry_SPA] [geometry] NULL,
[INSPECTION_STATUS] [nvarchar](10) NULL,
[TEXT1] [nvarchar](50) NULL,
[TEXT2] [nvarchar](50) NULL,
[TEXT3] [nvarchar](50) NULL,
[DS_PIT] [nvarchar](10) NULL,
[US_PIT] [nvarchar](10) NULL,
[ABANDONED_ALT] [smallint] NULL,
[VARCHAR_1] [nvarchar](255) NULL,
[VARCHAR_2] [nvarchar](255) NULL,
[VARCHAR_3] [nvarchar](255) NULL,
[VARCHAR_4] [nvarchar](255) NULL,
[VARCHAR_5] [nvarchar](255) NULL,
[VARCHAR_6] [nvarchar](255) NULL,
[VARCHAR_7] [nvarchar](255) NULL,
[VARCHAR_8] [nvarchar](255) NULL,
[VARCHAR_9] [nvarchar](255) NULL,
[VARCHAR_10] [nvarchar](255) NULL,
[VARCHAR_11] [nvarchar](255) NULL,
[VARCHAR_12] [nvarchar](255) NULL,
[VARCHAR_13] [nvarchar](255) NULL,
[VARCHAR_14] [nvarchar](255) NULL,
[VARCHAR_15] [nvarchar](255) NULL,
[INT_1] [smallint] NULL,
[INT_2] [smallint] NULL,
[INT_3] [smallint] NULL,
[INT_4] [smallint] NULL,
[INT_5] [smallint] NULL,
[INT_6] [smallint] NULL,
[INT_7] [smallint] NULL,
[INT_8] [smallint] NULL,
[INT_9] [smallint] NULL,
[INT_10] [smallint] NULL,
[DATE_1] [datetime] NULL,
[DATE_2] [datetime] NULL,
[BIT_1] [smallint] NULL,
[BIT_2] [smallint] NULL,
[BIT_3] [smallint] NULL,
[BIT_4] [smallint] NULL,
[BIT_5] [smallint] NULL,
[BIT_6] [smallint] NULL,
[BIT_7] [smallint] NULL,
[BIT_8] [smallint] NULL,
[BIT_9] [smallint] NULL,
[BIT_10] [smallint] NULL,
[BIT_11] [smallint] NULL,
[BIT_12] [smallint] NULL,
[BIT_13] [smallint] NULL,
[BIT_14] [smallint] NULL,
[BIT_15] [smallint] NULL,
[TEXT11] [nvarchar](50) NULL,
[TEXT21] [nvarchar](50) NULL,
[TEXT31] [nvarchar](50) NULL,
[TEXT4] [nvarchar](50) NULL,
[TEXT5] [nvarchar](50) NULL,
[TEXT6] [nvarchar](50) NULL,
[TEXT7] [nvarchar](50) NULL,
[TEXT8] [nvarchar](50) NULL,
[TEXT9] [nvarchar](50) NULL,
[TEXT10] [nvarchar](50) NULL,
[COMM1] [nvarchar](255) NULL,
[COMM2] [nvarchar](255) NULL,
[COMM3] [nvarchar](255) NULL,
[COMM4] [nvarchar](255) NULL,
[COMM5] [nvarchar](255) NULL,
[COMM6] [nvarchar](255) NULL,
[COMM7] [nvarchar](255) NULL,
[COMM8] [nvarchar](255) NULL,
[COMM9] [nvarchar](255) NULL,
[COMM10] [nvarchar](255) NULL,
[OLD_ID_COUNTER] [int] NULL,
[ASSET_PROCESS_ID] [int] NULL,
[DISPOSAL_JOBNO] [int] NULL,
[DATE_3] [datetime] NULL,
[DATE_4] [datetime] NULL,
[CATCH_NO] [int] NULL,
PRIMARY KEY CLUSTERED
(
[GMSC_Key] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[AREG_GMSC] ADD CONSTRAINT [DF_AREG_GMSC_DISPOSED] DEFAULT ((0)) FOR [DISPOSED]
GO
ALTER TABLE [dbo].[AREG_GMSC] ADD CONSTRAINT [DF_AREG_GMSC_ABANDONED] DEFAULT ((0)) FOR [ABAND]
GO
ALTER TABLE [dbo].[AREG_GMSC] ADD CONSTRAINT [DF_AREG_GMSC_FLOW] DEFAULT ((0)) FOR [FLOW]
GO
ALTER TABLE [dbo].[AREG_GMSC] ADD CONSTRAINT [DF_AREG_GMSC_VERIFIED] DEFAULT ((0)) FOR [VERIFIED]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Null not yet Inspected, "1" New Asset just Inspected, "2" Been Inspected' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'AREG_GMSC', @level2type=N'COLUMN',@level2name=N'INSPECTION_STATUS'
GO
By the way there are probably about 120 views to this table.
September 17, 2017 at 5:05 pm
Here are the triggers.
USE [Assets_GMSC_Prod]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[AREG_GMSC_Bin_Ins]
ON [dbo].[AREG_GMSC]
AFTER INSERT,UPDATE
AS
IF EXISTS (SELECT * FROM INSERTED WHERE FEATURE IN ('Bin'))
BEGIN
SET NOCOUNT ON;
DECLARE @ERROR_COMP_ID varchar(100)
SET @ERROR_COMP_ID = 'Error on Insert '
BEGIN TRY
UPDATE p
SET PRECINCT = (Case When
p.Geometry_SPA.STWithin(b.Geometry_SPA) = 1 then 'SP' Else 'SL' End)
FROM vw_bin p
left join [Infrastructure].[dbo].[SIM_Shopping_Precinct] b
ON p.Geometry_SPA.STWithin(b.Geometry_SPA) = 1
WHERE p.GMSC_Key in (SELECT GMSC_Key FROM INSERTED)
END TRY
BEGIN CATCH
SET @ERROR_COMP_ID+= CONVERT(varchar(100),@@ERROR)
PRINT @ERROR_COMP_ID
ROLLBACK TRANSACTION
END CATCH
END
GO
USE [Assets_GMSC_Prod]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[AREG_GMSC_Field_Ins]
ON [dbo].[AREG_GMSC]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ERROR_COMP_ID varchar(100)
SET @ERROR_COMP_ID = 'Error on Insert '
BEGIN TRY
IF NOT EXISTS (SELECT * FROM INSERTED
WHERE ([BIT_7] IS NULL OR [BIT_7] = 0) AND ([BIT_8] IS NULL OR [BIT_8] = 0) AND ([BIT_9] IS NULL OR [BIT_9] = 0) AND ([BIT_10] IS NULL OR [BIT_10] = 0) AND ([BIT_11] IS NULL OR [BIT_11] = 0) )
INSERT INTO [tbl_Asset_Inspection] ( [GMSC_Key],[ID_Counter] ,[Inspection_Date] ,[Inspected_By],[Inspection_Comments] ,[Defect_Code],[Defect_Comment],[Merit_ID],[Unacceptable_Standard],[Maintained_Inappropriately],[Utilised_Inappropriately],[ConditionRate_8or_Above],[BeyondLife_ofType],[Outside_Intervention_Lvls] ,[Reactive_Inspection],[Programmed_Inspection],[Capital_Inspection],[Condition_Inspection],[Audit_Inspection],[Physical_Condition],[Functionality],[Compliance],[Safety_Liability],[Serviceability],[Level_of_Defect],[Useful_Life]
)
SELECT [GMSC_Key],[ID_COUNTER],[DATEINSP],[INSPECTOR] ,[VARCHAR_1] ,[VARCHAR_2],[VARCHAR_3],[VARCHAR_4],[BIT_1],[BIT_2],[BIT_3],[BIT_4],[BIT_5],[BIT_6],[BIT_7],[BIT_8],[BIT_9],[BIT_10],[BIT_11],[INT_1],[INT_2],[INT_3],[INT_4],[INT_5],[INT_6],[INT_7]
FROM INSERTED
END TRY
BEGIN CATCH
SET @ERROR_COMP_ID+= CONVERT(varchar(100),@@ERROR)
PRINT @ERROR_COMP_ID
ROLLBACK TRANSACTION
END CATCH
END
GO
USE [Assets_GMSC_Prod]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[AREG_GMSC_Field_Upd]
ON [dbo].[AREG_GMSC]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @ERROR_COMP_ID varchar(100)
SET @ERROR_COMP_ID = 'Error on Update '
BEGIN TRY
IF NOT EXISTS (SELECT * FROM INSERTED
WHERE ([BIT_7] IS NULL OR [BIT_7] = 0) AND ([BIT_8] IS NULL OR [BIT_8] = 0) AND ([BIT_9] IS NULL OR [BIT_9] = 0) AND ([BIT_10] IS NULL OR [BIT_10] = 0) AND ([BIT_11] IS NULL OR [BIT_11] = 0) )
INSERT INTO [tbl_Asset_Inspection] ( [GMSC_Key],[ID_Counter] ,[Inspection_Date] ,[Inspected_By],[Inspection_Comments] ,[Defect_Code],[Defect_Comment],[Merit_ID],[Unacceptable_Standard],[Maintained_Inappropriately],[Utilised_Inappropriately],[ConditionRate_8or_Above],[BeyondLife_ofType],[Outside_Intervention_Lvls] ,[Reactive_Inspection],[Programmed_Inspection],[Capital_Inspection],[Condition_Inspection],[Audit_Inspection],[Physical_Condition],[Functionality],[Compliance],[Safety_Liability],[Serviceability],[Level_of_Defect],[Useful_Life]
)
SELECT [GMSC_Key],[ID_COUNTER],[DATEINSP],[INSPECTOR] ,[VARCHAR_1] ,[VARCHAR_2],[VARCHAR_3],[VARCHAR_4],[BIT_1],[BIT_2],[BIT_3],[BIT_4],[BIT_5],[BIT_6],[BIT_7],[BIT_8],[BIT_9],[BIT_10],[BIT_11],[INT_1],[INT_2],[INT_3],[INT_4],[INT_5],[INT_6],[INT_7]
FROM INSERTED
END TRY
BEGIN CATCH
SET @ERROR_COMP_ID+= CONVERT(varchar(100),@@ERROR)
PRINT @ERROR_COMP_ID
ROLLBACK TRANSACTION
END CATCH
END
GO
USE [Assets_GMSC_Prod]
GO
/****** Object: Trigger [dbo].[AREG_GMSC_Geometry_SPA_ins] Script Date: 18/09/2017 9:02:20 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[AREG_GMSC_Geometry_SPA_ins] ON [dbo].[AREG_GMSC] AFTER INSERT AS BEGIN SET NOCOUNT ON; IF EXISTS (SELECT NULL FROM INSERTED WHERE INSERTED.[Geometry_SPA] IS NULL AND INSERTED.[Geometry] IS NOT NULL) BEGIN RAISERROR ('Unsupported. Cannot specify value for GDO column only, native column value must also be provided.', 0, 1) ROLLBACK TRANSACTION END END
GO
USE [Assets_GMSC_Prod]
GO
/****** Object: Trigger [dbo].[AREG_GMSC_Geometry_SPA_upd] Script Date: 18/09/2017 9:02:32 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[AREG_GMSC_Geometry_SPA_upd] ON [dbo].[AREG_GMSC] AFTER UPDATE AS BEGIN SET NOCOUNT ON; IF UPDATE([Geometry_SPA]) BEGIN IF NOT UPDATE([Geometry]) BEGIN UPDATE [AREG_GMSC] SET [Geometry] = NULL WHERE EXISTS (SELECT NULL FROM INSERTED WHERE INSERTED.[GMSC_Key] = [AREG_GMSC].[GMSC_Key]) END END ELSE IF UPDATE([Geometry]) BEGIN RAISERROR ('Unsupported. Cannot specify value for GDO column only, native column value must also be provided.', 0, 1) ROLLBACK TRANSACTION END END
GO
USE [Assets_GMSC_Prod]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Bin_BBQ_update_ini]
ON [dbo].[AREG_GMSC]
AFTER INSERT,UPDATE
AS
IF EXISTS (SELECT * FROM inserted WHERE FEATURE IN ('Bin','Barbeque','Bin Cage','Facility Bin'))
BEGIN
SET NOCOUNT ON;
INSERT INTO [Assets_GMSC_Prod].[dbo].[tbl_Bin_BBQ_History]
(ADDRESS1, ADDRESS2, ADDRESS3, ASSET_DESCRIPTION, ASSET_NAME, ASSET_PROCESS_ID,
BIT_1, BIT_11, BIT_12, BIT_13, BIT_14, BIT_15, COMM1, COMM2 , COMM3, COMM4, COMM5, COMMENT,
CONDITION, CONTROL, DATE_1 , DATEINSP, DATEINST, DISPOSAL_DATE, DISPOSAL_JOBNO,
DISPOSED, FEATURE, Geometry, Geometry_SPA, GMSC_Key, HEIGHT, ID_COUNTER,
INSPECTION_STATUS, INSPECTOR, INT_1, INT_2, INT_3, INT_5, INT_6, INT_10, INT_8, INT_4, JOBNO, LOCALITY,
MAPREF, MATERIAL, MPSNO, OLD_ID_COUNTER, PHOTOCODE, STATUS, STATUS_COMMENT,
TEXT11, TEXT21, TEXT31, TEXT1, TEXT2, TEXT3, TEXT4, TEXT5, TEXT6, Txn_Date, TYPE, TYPE2, TYPE3,
VARCHAR_7, VARCHAR_8, VER_COMM)
SELECT p.ADDRESS1, p.ADDRESS2, p.ADDRESS3, p.ASSET_DESCRIPTION, p.ASSET_NAME, p.ASSET_PROCESS_ID,
p.BIT_1, p.BIT_11, p.BIT_12, p.BIT_13, p.BIT_14, p.BIT_15, p.COMM1, p.COMM2 , p.COMM3, p.COMM4, p.COMM5, p.COMMENT,
p.CONDITION, p.CONTROL, p.DATE_1 , p.DATEINSP, p.DATEINST, p.DISPOSAL_DATE, p.DISPOSAL_JOBNO,
p.DISPOSED, p.FEATURE, p.Geometry, p.Geometry_SPA, p.GMSC_Key, p.HEIGHT, p.ID_COUNTER,
p.INSPECTION_STATUS, p.INSPECTOR, p.INT_1, p.INT_2, p.INT_3, p.INT_5, p.INT_6, p.INT_10, p.INT_8, p.INT_4, p.JOBNO, p.LOCALITY,
p.MAPREF, p.MATERIAL, p.MPSNO, p.OLD_ID_COUNTER, p.PHOTOCODE, p.STATUS, p.STATUS_COMMENT,
p.TEXT11, p.TEXT21, p.TEXT31, p.TEXT1, p.TEXT2, p.TEXT3, p.TEXT4, p.TEXT5, p.TEXT6, p.Txn_Date, p.TYPE, p.TYPE2, p.TYPE3,
p.VARCHAR_7, p.VARCHAR_8, p.VER_COMM
FROM AREG_GMSC as p
LEFT OUTER JOIN tbl_Bin_BBQ_History as e
ON e.GMSC_Key = p.GMSC_Key
where p.Txn_Date is not null and p.FEATURE in ('Bin','Barbeque','Bin Cage','Facility Bin') and e.GMSC_Key is null
declare @var1 datetime;
select @var1 = MAX(Txn_Date)--,
from [Assets_GMSC_Prod].[dbo].[tbl_Bin_BBQ_History]
--***********************--
INSERT INTO [Assets_GMSC_Prod].[dbo].[tbl_Bin_BBQ_History]
(ADDRESS1, ADDRESS2, ADDRESS3, ASSET_DESCRIPTION, ASSET_NAME, ASSET_PROCESS_ID,
BIT_1, BIT_11, BIT_12, BIT_13, BIT_14, BIT_15, COMM1, COMM2 , COMM3, COMM4, COMM5, COMMENT,
CONDITION, CONTROL, DATE_1 , DATEINSP, DATEINST, DISPOSAL_DATE, DISPOSAL_JOBNO,
DISPOSED, FEATURE, Geometry, Geometry_SPA, GMSC_Key, HEIGHT, ID_COUNTER,
INSPECTION_STATUS, INSPECTOR, INT_1, INT_2, INT_3, INT_5, INT_6, INT_10, INT_8, INT_4, JOBNO, LOCALITY,
MAPREF, MATERIAL, MPSNO, OLD_ID_COUNTER, PHOTOCODE, STATUS, STATUS_COMMENT,
TEXT11, TEXT21, TEXT31, TEXT1, TEXT2, TEXT3, TEXT4, TEXT5, TEXT6, Txn_Date, TYPE, TYPE2, TYPE3,
VARCHAR_7, VARCHAR_8, VER_COMM)
SELECT p.ADDRESS1, p.ADDRESS2, p.ADDRESS3, p.ASSET_DESCRIPTION, p.ASSET_NAME, p.ASSET_PROCESS_ID,
p.BIT_1, p.BIT_11, p.BIT_12, p.BIT_13, p.BIT_14, p.BIT_15, p.COMM1, p.COMM2 , p.COMM3, p.COMM4, p.COMM5, p.COMMENT,
p.CONDITION, p.CONTROL, p.DATE_1 , p.DATEINSP, p.DATEINST, p.DISPOSAL_DATE, p.DISPOSAL_JOBNO,
p.DISPOSED, p.FEATURE, p.Geometry, p.Geometry_SPA, p.GMSC_Key, p.HEIGHT, p.ID_COUNTER,
p.INSPECTION_STATUS, p.INSPECTOR, p.INT_1, p.INT_2, p.INT_3, p.INT_5, p.INT_6, p.INT_10, p.INT_8, p.INT_4, p.JOBNO, p.LOCALITY,
p.MAPREF, p.MATERIAL, p.MPSNO, p.OLD_ID_COUNTER, p.PHOTOCODE, p.STATUS, p.STATUS_COMMENT,
p.TEXT11, p.TEXT21, p.TEXT31, p.TEXT1, p.TEXT2, p.TEXT3, p.TEXT4, p.TEXT5, p.TEXT6, p.Txn_Date, p.TYPE, p.TYPE2, p.TYPE3,
p.VARCHAR_7, p.VARCHAR_8, p.VER_COMM
FROM AREG_GMSC as p
JOIN tbl_Bin_BBQ_History as e
ON e.GMSC_Key = p.GMSC_Key
where p.Txn_Date is not null and p.Txn_Date>@var1 and p.FEATURE in ('Bin','Barbeque','Bin Cage','Facility Bin')
--***********************--
delete from [Assets_GMSC_Prod].[dbo].[tbl_Bin_BBQ_History]
where ID not in
(
select min(ID)
from [Assets_GMSC_Prod].[dbo].[tbl_Bin_BBQ_History]
group by ID_COUNTER,GMSC_Key,Txn_Date
)
END
GO
USE [Assets_GMSC_Prod]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[vw_pits_update_ini]
ON [dbo].[AREG_GMSC]
AFTER INSERT,UPDATE
AS
IF EXISTS (SELECT * FROM inserted WHERE FEATURE IN ('Pits','Pipes'))
BEGIN
SET NOCOUNT ON;
INSERT INTO [Assets_GMSC_Prod].[dbo].[Pits_History]
([ABAND],[ACCESS],[ACTION],[ADDRESS1],[COMMENT],[CONTROL],[COVER],[INSPECTOR],[DATEINSP]
,[DATEINST],[DEPTH],[DISPOSED],[DWG_NO],[FEATURE],[ID_COUNTER],[LIDTYPE],[PIT_NO],[PIT_SIZE]
,[STATUS],[STATUS_COMMENT],[TYPE],[VER_COMM],[VERIFIED],[Txn_Date],[DEBTYPE],[LOCALITY]
,[INSPECTION_STATUS],[WORK_TYPE],[WORK_AREA],[MERIT_NO],[GMSC_KEY],[P_FULL], [D_CLEAN], [M_JETTED]
,[M_ROOTCUT], [MC_VOL], [MC_TYPE1], [MC_TYPE2], [MC_TYPE3], [MC_P_TYPE1], [MC_P_TYPE2]
,[MC_P_TYPE3], [SR_NO], [ST_DEF], [LOW_P], [WATER], [MAIN_REQ], [RISK], [CUST]
,[CUST_M], [ESCALATE], [ST_PIT], [ST_PIPE], [ST_LID], [EASEMENT], [WORKS_DESC]
,[WORKS_REF], [WORKS_COM], [DIFF], [DIFF_COM], [VEHICLE], [REACTOR], [DATEREACT], [EDITOR], [RESPONSE_DATE], [CONDITION])
SELECT p.ABAND,p.ACCESS,p.[ACTION],p.ADDRESS1,p.COMMENT,p.[CONTROL],p.COVER,p.INSPECTOR,p.DATEINSP,
p.DATEINST,p.DEPTH,p.DISPOSED,p.DWG_NO,p.FEATURE,p.ID_COUNTER,p.LIDTYPE,p.PIT_NO,p.PIT_SIZE,
p.[STATUS],p.STATUS_COMMENT,p.[TYPE],p.VER_COMM,p.VERIFIED,p.Txn_Date,p.DEBTYPE,p.LOCALITY,
p.INSPECTION_STATUS,p.TEXT1,p.TEXT2,p.TEXT3,p.GMSC_Key,p.TEXT4, p.DATE_1, p.TEXT5,
p.TEXT6, p.TEXT7 ,p.BIT_1 , p.BIT_2 , p.BIT_3 , p.TEXT8 , p.TEXT9 ,
p.TEXT10 , p.TEXT11 , p.BIT_4 , p.BIT_5 , p.BIT_6 , p.BIT_7 , p.TEXT21 , p.BIT_8 ,
p.TEXT31 , p.BIT_9 , p.BIT_10 , p.BIT_11 , p.BIT_12 , p.VARCHAR_1 , p.VARCHAR_2 ,
p.VARCHAR_3 , p.VARCHAR_4 , p.BIT_13, p.VARCHAR_5, p.VARCHAR_6, p.VARCHAR_15, p.DATE_2, p.VARCHAR_8, p.DATE_3, p.CONDITION
FROM AREG_GMSC as p
LEFT OUTER JOIN Pits_History as e
ON e.GMSC_Key = p.GMSC_Key
where p.Txn_Date is not null and p.FEATURE in ('Pits','Pipes') and e.GMSC_Key is null
declare @var1 datetime;
select @var1 = MAX(Txn_Date)--,
from [Assets_GMSC_Prod].[dbo].[Pits_History]
INSERT INTO [Assets_GMSC_Prod].[dbo].[Pits_History]
([ABAND],[ACCESS],[ACTION],[ADDRESS1],[COMMENT],[CONTROL],[COVER],[INSPECTOR],[DATEINSP]
,[DATEINST],[DEPTH],[DISPOSED],[DWG_NO],[FEATURE],[ID_COUNTER],[LIDTYPE],[PIT_NO],[PIT_SIZE]
,[STATUS],[STATUS_COMMENT],[TYPE],[VER_COMM],[VERIFIED],[Txn_Date],[DEBTYPE],[LOCALITY]
,[INSPECTION_STATUS],[WORK_TYPE],[WORK_AREA],[MERIT_NO],[GMSC_KEY],[P_FULL], [D_CLEAN], [M_JETTED]
,[M_ROOTCUT], [MC_VOL], [MC_TYPE1], [MC_TYPE2], [MC_TYPE3], [MC_P_TYPE1], [MC_P_TYPE2]
,[MC_P_TYPE3], [SR_NO], [ST_DEF], [LOW_P], [WATER], [MAIN_REQ], [RISK], [CUST]
,[CUST_M], [ESCALATE], [ST_PIT], [ST_PIPE], [ST_LID], [EASEMENT], [WORKS_DESC]
,[WORKS_REF], [WORKS_COM], [DIFF], [DIFF_COM], [VEHICLE], [REACTOR], [DATEREACT], [EDITOR], [RESPONSE_DATE], [CONDITION])
SELECT p.ABAND,p.ACCESS,p.[ACTION],p.ADDRESS1,p.COMMENT,p.[CONTROL],p.COVER,p.INSPECTOR,p.DATEINSP,
p.DATEINST,p.DEPTH,p.DISPOSED,p.DWG_NO,p.FEATURE,p.ID_COUNTER,p.LIDTYPE,p.PIT_NO,p.PIT_SIZE,
p.[STATUS],p.STATUS_COMMENT,p.[TYPE],p.VER_COMM,p.VERIFIED,p.Txn_Date,p.DEBTYPE,p.LOCALITY,
p.INSPECTION_STATUS,p.TEXT1,p.TEXT2,p.TEXT3,p.GMSC_Key,p.TEXT4, p.DATE_1, p.TEXT5,
p.TEXT6, p.TEXT7 ,p.BIT_1 , p.BIT_2 , p.BIT_3 , p.TEXT8 , p.TEXT9 ,
p.TEXT10 , p.TEXT11 , p.BIT_4 , p.BIT_5 , p.BIT_6 , p.BIT_7 , p.TEXT21 , p.BIT_8 ,
p.TEXT31 , p.BIT_9 , p.BIT_10 , p.BIT_11 , p.BIT_12 , p.VARCHAR_1 , p.VARCHAR_2 ,
p.VARCHAR_3 , p.VARCHAR_4 , p.BIT_13, p.VARCHAR_5, p.VARCHAR_6, p.VARCHAR_15, p.DATE_2, p.VARCHAR_8, p.DATE_3, p.CONDITION
FROM AREG_GMSC as p
JOIN Pits_History as e
ON e.GMSC_Key = p.GMSC_Key
where p.Txn_Date is not null and p.Txn_Date>@var1 and p.FEATURE in ('Pits','Pipes')
delete from [Assets_GMSC_Prod].[dbo].[Pits_History]
where ID not in
(
select min(ID)
from [Assets_GMSC_Prod].[dbo].[Pits_History]
group by ID_COUNTER,GMSC_Key,Txn_Date
)
END
Thanks,
Josh
September 17, 2017 at 5:22 pm
There are 5 indices.
USE [Assets_GMSC_Prod]
GO
SET ANSI_PADDING ON
GO
CREATE NONCLUSTERED INDEX [address1] ON [dbo].[AREG_GMSC]
(
[ADDRESS1] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
USE [Assets_GMSC_Prod]
GO
SET ARITHABORT ON
SET CONCAT_NULL_YIELDS_NULL ON
SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET NUMERIC_ROUNDABORT OFF
GO
CREATE SPATIAL INDEX [AREG_GMSC_Geometry_SPA_Sindx] ON [dbo].[AREG_GMSC]
(
[Geometry_SPA]
)USING GEOMETRY_GRID
WITH (BOUNDING_BOX =(293000, 5736000, 350000, 5776000), GRIDS =(LEVEL_1 = MEDIUM,LEVEL_2 = MEDIUM,LEVEL_3 = MEDIUM,LEVEL_4 = MEDIUM),
CELLS_PER_OBJECT = 8, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
USE [Assets_GMSC_Prod]
GO
CREATE NONCLUSTERED INDEX [dateinsp] ON [dbo].[AREG_GMSC]
(
[DATEINSP] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
USE [Assets_GMSC_Prod]
GO
SET ANSI_PADDING ON
GO
CREATE NONCLUSTERED INDEX [meritno] ON [dbo].[AREG_GMSC]
(
[TEXT3] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
USE [Assets_GMSC_Prod]
GO
ALTER TABLE [dbo].[AREG_GMSC] ADD PRIMARY KEY CLUSTERED
(
[GMSC_Key] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
September 17, 2017 at 5:43 pm
Also, there are 250000+ rows.
I am just reading up on some of the suggestions mentioned here to get my head around how some of these things work.
I was new to stale statistics for instance.
Thanks again,
Josh
September 17, 2017 at 6:17 pm
Here are the results from sys.dm_os_latch_stats and wait_stats.
Viewing 15 posts - 1 through 15 (of 22 total)
You must be logged in to reply to this topic. Login to reply
This website stores cookies on your computer.
These cookies are used to improve your website experience and provide more personalized services to you, both on this website and through other media.
To find out more about the cookies we use, see our Privacy Policy