여러 가지가 떠오른다. 기본 키는 GUID 또는 정수입니다. GUID이고 클러스터 된 경우 SQL Server는 순차적으로 여러 위치에 삽입해야합니다. 데이터베이스 크기, 로그 크기 또는 항상 자동 증가합니까? Sizing database files
실행 프로파일 러를 실행하고 nhibernate가 생성하는 SQL의 종류를 확인하십시오. 초당 1000 개의 인서트가 그다지 인상적이지는 않습니다. 병목 현상도 하드웨어 일 뿐이며 크기와 구성이 올바른지 확인하십시오. tempdb, 로그 및 데이터 파일이 같은 드라이브에 있습니까? 이 경우, 별도의 드라이브
또 다른 옵션은 단일 행 대신이 삽입 및 배치를하지 조각 여기
내가 SSMS에서 실행 한 예입니다 삽입을 재 작성하는 것입니다, 그것은 166에서 4999 개 삽입을 수행으로 이동 당신이 트랜잭션의 전체를 감싸는 경우 밀리 초 1000 40 밀리 초
CREATE TABLE Sometest(id INT PRIMARY KEY,
SomeCol VARCHAR(200), SomeDate DATETIME,SomeCol2 VARCHAR(200),
SomeDate2 DATETIME,SomeCol3 VARCHAR(200),
SomeDate3 DATETIME,SomeCol4 VARCHAR(200), SomeDate4 DATETIME)
GO
DECLARE @start DATETIME = GETDATE()
SET NOCOUNT ON
DECLARE @id INT =1
WHILE @id < 1000
BEGIN
INSERT Sometest
SELECT @id ,'BlaBlaBlaBlaBlaBlaBlaBlaBlaBla111111',GETDATE(),
'BlaBlaBlaBlaBlaBlaBlaBlaBlaBla2222',GETDATE(),
'BlaBlaBlaBlaBlaBlaBlaBlaBlaBla3333',GETDATE(),
'BlaBlaBlaBlaBlaBlaBlaBlaBlaBla4444',GETDATE()
SET @id+=1
END
SELECT DATEDIFF(ms,@start,GETDATE())
SELECT COUNT(*) FROM Sometest
은 23 밀리 초
TRUNCATE TABLE Sometest
DECLARE @start DATETIME = GETDATE()
SET NOCOUNT ON
BEGIN tran
DECLARE @id INT =1
WHILE @id < 50000
BEGIN
INSERT Sometest
SELECT @id ,'BlaBlaBlaBlaBlaBlaBlaBlaBlaBla111111',GETDATE(),
'BlaBlaBlaBlaBlaBlaBlaBlaBlaBla2222',GETDATE(),
'BlaBlaBlaBlaBlaBlaBlaBlaBlaBla3333',GETDATE(),
'BlaBlaBlaBlaBlaBlaBlaBlaBlaBla4444',GETDATE()
SET @id+=1
END
commit
SELECT DATEDIFF(ms,@start,GETDATE())
SELECT COUNT(*) FROM Sometest
01에 훨씬 더 빨리, 50000 개 삽입 800 밀리, 103 밀리 초 5000 개 삽입, 1000 개 삽입 될 것이다 23,516,
은 테이블과 문제가 무엇인지, 어쩌면 당신은 조각 모음, 파일, 별도의 파일을 프리 사이즈 필요가 조사처럼 보이는 테이블과 시스템에 그런 일을 실행 테이블 등 등 등
TABLE_A에는 자동 증가 int ID가 있고 TABLE_B에는 GUID ID가 있습니다.우리의 하드웨어가 주어진다면 얼마나 오래 삽입해야 할 것인가? – Yannis
SSMS에서 테스트를 실행하고 테스트하십시오. 테스트하지 않고 문제가 무엇인지 어떻게 알 수 있습니까? 네트워크, 드라이브가 될 수 있습니다. 실제 레이아웃은 무엇입니까, 얼마나 많은 RAM이 SQL Server에서 볼 수 있습니까? 등 성능 테스트 계획은 어떻게 생겼습니까 – SQLMenace