SQL 커서를 열어두는 "합리적인" 시간은 얼마나 됩니까?

StackOverflow https://stackoverflow.com/questions/10727

  •  08-06-2019
  •  | 
  •  

문제

애플리케이션에서 커밋하거나 롤백하기 전에 트랜잭션을 열어두는 데 "긴 시간"이 얼마나 걸리나요?분?몇 초?시간?

그리고 어떤 데이터베이스에?

도움이 되었습니까?

해결책

@lomaxx, @ChanChan:내가 아는 한 커서는 SQL Server 및 Sybase(T-SQL 변형)에서만 문제가 됩니다.선택한 데이터베이스가 Oracle이라면 커서가 친구입니다.저는 커서를 사용함으로써 실제로 성능이 향상되는 경우를 많이 보았습니다.커서는 믿을 수 없을 정도로 유용한 메커니즘이며 "커서를 사용하면 해고됩니다"와 같은 말은 약간 우스꽝스럽습니다.

하지만 필요한 절대 최소값에 대해서만 커서를 열어두기를 원합니다.문제 영역을 이해하지 못한 채 최대 시간을 지정하는 것은 임의적이고 의미가 없습니다.

다른 팁

아마도 이것 때문에 화를 낼 것입니다. 그러나 커서를 사용하면 심각한 성능 저하가 발생하므로 사용을 피해야 합니다.반드시 사용해야 하는 경우 가능한 한 최소한의 시간 동안 열어두어 커서에 의해 차단되는 리소스를 최대한 빨리 해제해야 합니다.

업무:분.

커서:최대 0초, 커서를 사용하면 실행됩니다.

우리가 SQL Server를 실행해야 하는 고가용성 웹 환경에 있고 정확하게 버전을 지정하고 유지 관리할 수 없기 때문에 저장된 프로세스도 허용하지 않는다는 점을 고려하면 이는 터무니없는 일이 아닙니다.아마도 오라클을 사용하고 있었다면 말이죠.

일반적으로 나는 다른 답변에 동의합니다.가능하면(대부분의 경우) 커서를 피하고 최대한 빨리 닫으십시오.

하지만:그것은 모두 당신이 일하는 환경에 달려 있습니다.

  • 사용자가 많은 프로덕션 웹사이트 환경이라면 누군가 타임아웃되기 전에 커서가 사라지는지 확인하세요.
  • 예를 들어, 다른 작업을 수행하지 않는 독점 시스템에서 "로그 분석 저장 프로시저"(또는 기타 항목)를 작성하는 경우:당신이 하고 싶은 것은 무엇이든 자유롭게 하십시오.기다려야 할 사람은 당신뿐일 것입니다.커서를 사용한다고 해서 데이터베이스 서버가 죽는 것은 아닙니다.하지만 시간이 지남에 따라 사용 행동이 변할 수 있으며 어느 시점에는 해당 애플리케이션을 사용하는 사람이 10명일 수도 있다는 점을 고려해야 합니다.그러니 다른 방법을 찾아보세요 ;)

@9면:성능 문제는 제쳐두고 작업에 적합한 도구를 사용하는 것도 중요합니다.쿼리에서 코드로 커서를 이동하는 선택을 고려할 때 100번 중 99번은 해당 루핑 논리를 일종의 관리 코드에 넣는 것이 더 나을 것이라고 생각합니다.이렇게 하면 디버거 사용, 컴파일 시간 오류 검사, 유형 안전 등의 이점을 얻을 수 있습니다.

질문에 대한 내 대답은 여전히 ​​동일합니다. 커서를 사용하는 경우 최대한 빨리 닫으십시오. oracle에서는 명시적 커서도 사용하려고 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top