SQL 스크립트를 여러 번 실행해야하는 메소드가 있습니다. 이 스크립트는 데이터베이스의 테이블, 뷰, 저장 프로 시저 및 함수 작성에 사용됩니다. 100 개의 파일로 잘 작동하는이 코드를 생각해 냈습니다.프로세스 성능을 향상시키는 방법은 무엇입니까?
foreach (var folder in ActivityConstant.SourceFolders)
{
var destination = context.GetValue(this.DestinationPath) + folder;
// TODO: Execute all sql folders instead of each sql file.
// this is cmd command for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f"
foreach (var file in Directory.GetFiles(destination))
{
var begin = DateTime.Now;
context.TrackBuildWarning(string.Format("Start exec sql file at {0}.",
DateTime.Now));
Process process = new Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.FileName = "sqlcmd.exe";
process.StartInfo.Arguments = string.Format("-S {0} -d {1} -i {2} -U {3} -P {4}",
sqlServerName,
databaseName,
file,
sqlUserName,
sqlPassword);
process.StartInfo.WorkingDirectory = @"C:\";
process.Start();
//process.WaitForExit();
context.TrackBuildWarning(
string.Format(
"Finished exec sql file at {0} total time {1} milliseconds.",
DateTime.Now,
DateTime.Now.Subtract(begin).TotalMilliseconds));
}
}
이제 다음 단계로 넘어 가고 있습니다. 나는 약 600 개의 파일 (테이블, 뷰, 저장 프로 시저 및 함수)을 가진 데이터베이스로 테스트 중이며 현재 코드가 이와 같이 많은 양의 쿼리를 처리 할 수없는 것처럼 보입니다.
레코드가있는 한 약 100 개의 파일을 실행하는 데 3 ~ 5 분이 걸립니다. 이 질문을 쓰고있는 시점에이 600 개의 파일에 대해 40 분이 걸렸습니다.
내 코드를 개선하는 방법을 알고 싶습니다. 목표를 달성하기 위해 차이점을 이용하는 것이 더 나은 경우 어떤 제안도 환영합니다.
파일 내용을 처리 할 때 병목 현상이 코드이며 DBMS가 아닌 것이 확실합니까? –
SQL Server를 보셨습니까? 한 번에 많은 쿼리를 처리 할 수 있습니까? –
@JustinHarvey 어떻게 확인할 수 있습니까? – Anonymous