모든 삽입이 단일 저장 프로 시저로 수행되는 로그인 테이블이 있습니다.
CREATE TABLE dbo.LogTable(
LogRefnr int IDENTITY(1, 1) NOT NULL,
LogQuery varchar(255) NOT NULL,
LogTime datetime NOT NULL,
logQueryDuration int NULL,
LogSessionID int NULL,
CONSTRAINT PK_Log PRIMARY KEY CLUSTERED (LogRefnr)
)
go
Create procedure DBO.LogInsert ( @Query varchar(255), @time datetime, @duration int, @SessinID int) as
begin
Insert into LogTable ( LogRefnr, LogQuery, logQueryDuration, LogSessionID)
Values (@Query, @time, @duration, @SessinID);
end;
GO
현재 해당 테이블에 약 45500000 개의 행이 있으며 로깅을 다른 테이블로 보내려고합니다.
내 생각은 다음 스크립트를 사용하는 것입니다
begin Transaction
exec sp_rename LogTable, LogTableOld;
CREATE TABLE dbo.LogTable(
LogRefnr int IDENTITY(46000000, 1) NOT NULL, -- greater than select max(LogRefnr) from LogTableOld
LogQuery varchar(255) NOT NULL,
LogTime datetime NOT NULL,
logQueryDuration int NULL,
LogSessionID int NULL,
CONSTRAINT PK_Log2 PRIMARY KEY CLUSTERED (LogRefnr);
)
go
sp_recompile LogTable;
go
Commit;
이것이 작동하며 LogInsert를 호출하는 다른 프로 시저에 최소한의 영향을 미칩니 까?
2
sp_recompile이 필요하지 않습니다. dbo.LogTable 개체를 사용하는 개체에 대한 프로 시저 캐시는 개체 이름을 바꾸면 자동으로 만료됩니다.
—
mrdenny