The reason that your inserts are so slow is because that proc is full of errors, and must be throwing an exception every time you call it. I tried to clean it up, I am not sure why you want to create the application lock for what you are doing thou.
sql
ALTER PROCEDURE myProc
(
@param1 varchar(50),
@param2 int,
@param3 decimal(18,0),
@param4 decimal(18,0)
)
AS
BEGIN TRAN;
DECLARE @result int;
exec @result = sp_getapplock @Resource = 'Lock_Id', @LockMode = 'Exclusive';
IF @result = -3
BEGIN
ROLLBACK TRANSACTION;
END
ELSE
BEGIN
INSERT INTO myTable values(@param1, @param2, @param3, @param4)
exec @result = sp_releaseapplock @Resource = 'Lock_Id';
COMMIT TRANSACTION;
END
I see no need for the applock why not just run the insert?
sql
ALTER PROCEDURE myProc
(
@param1 varchar(50),
@param2 int,
@param3 decimal(18,0),
@param4 decimal(18,0)
)
AS
INSERT INTO myTable values(@param1, @param2, @param3, @param4)