tempdb에 파일을 추가 할 때 핫스팟이란 무엇입니까?


12

SQL Server 서비스를 다시 시작하지 않고도 tempdb 파일을 SQL Server에 추가 할 수 있는지 확인하려고합니다. 데이터베이스 관리자에서이 답변을 보았습니다.

그리고 하나의 대답은 다음과 같습니다.

추가-중단이 필요하지 않습니다. Microsoft의 Sean이 지적했듯이 SQL은 채워진 파일을 선호합니다. 하나의 데이터 파일에서 더 많은 데이터를 추가하는 경우 SQL은 새로운 데이터 파일을 잠시 동안 사용하지만 파일이 하나만있는 것보다 성능이 나빠지지는 않습니다. 그러나 2+가 이미 있고 하나 더 추가하면 새 것이 핫스팟되어 성능이 저하됩니다.

그러나 주석은 다음을주의합니다.

"추가"부분에 부록을 추가 할 것입니다. "추가 : 아니오, 그러나 대부분 불균형이되어 핫스팟이 발생하여 상황이 훨씬 나빠질 수 있습니다."

나는 그 의견에 대해 다음과 같은 질문을 가지고 있지만 그 질문에 대한 답변을 의견을 통해 논평자에게 요구하는 것이 아니라 내 자신의 새로운 질문으로 질문하도록 지시 받았다.

구체적으로 특별히:

  1. 핫스팟이란 무엇입니까? (Google을 통해 일부 정보를 얻었지만 파일을 추가 한 후 tempdb에서 핫스팟으로 발생하는 일에 대해 자세히 설명하지는 않았습니다)
  2. hot spotting은 tempdb에서 상황을 훨씬 더 악화시키는 것은 무엇입니까?
  3. DB의 어떤 특정한 것들이 훨씬 더 나빠질까요?

답변:


16
  1. 핫스팟이란 무엇입니까?

    이 문맥에서 "핫 스팟 팅"은 tempdb에 여러 개의 파일이 있지만 모든 I / O 작업이 단일 파일에서 수행되고 있음을 의미합니다. tempdb가 파일 추가를 정당화 할 정도로 바쁘면 ( 비례 채우기 로 인해) 핫 스팟으로 이어지는 불균형이 오래 지속 되므로 경고가 약간 적을 것이라고 생각합니다. 어쨌든 내 경험으로는.

  2. hot spotting은 tempdb에서 상황을 훨씬 더 악화시키는 것은 무엇입니까?

    대부분의 워크로드에서 쓰기 작업이 무뎌지기 때문에 tempdb에서 더 나쁜 것으로 생각됩니다. 사용자 데이터베이스에서도 비슷한 문제가 발생할 수 있지만 이미 tempdb에서 문제를 해결하려고 시도하고 있기 때문에 ...

  3. DB의 어떤 특정한 것들이 훨씬 더 나빠질까요?

    주로 쓰기 시간. 근처에 7 개의 다른 ATM이 있어도 모두 같은 ATM을 사용하려고한다고 상상해보십시오. 어떤 시점에서도 너무 많이 쓸 수 있습니다. 다른 모든 것은 기다려야합니다. 더 많은 파일 (및 작업을 예약하기에 충분한 코어)을 사용하면 I / O를보다 균등하게 분산시킬 수 있습니다.

    그냥 확인하십시오 :


10
  1. 핫스팟이란 무엇입니까?

Aaron은 정확하고 위에서 말한 것을 다시 해치지 않을 것이지만 디스크 IO에 관한 것이 아닙니다. 대부분의 사람들이 TempDB에서 문제를 일으키는 주요 부분은 특정 추적 구조에 대한 경합 때문입니다.

여러 tempdb 파일을 사용하면 비례 채우기 및 라운드 로빈 알고리즘이 할당에서 "공정한"상태로 효과적으로 발생할 수 있으므로 할당없이 새 파일을 추가하면 파일이 조금씩 사라집니다. PAGELATCH_*새 파일에서 기다리거나 다른 파일에서 기다리지 않으면 "치킨 작은"경고 (아래 제품 업데이트 참조)에 동의하지 않습니다. 이는 일반적으로 TempDB 활동이 많고 이미 하나 이상의 파일이있는 시스템에서 발생합니다.

SQL Server 2019에는 일부 기본 시스템 테이블을 메모리 내 테이블로 변경 하는 옵션이 있으며, 이는 메모리 내 개체가 디스크 베이크 테이블과 다르게 할당되므로 개선 될 수 있습니다. 디스크 기반 테이블은 수년 동안 우리 모두가 작업해온 전통적인 테이블입니다. SQL Server 2014에는 메모리 최적화 테이블이 도입되었습니다 . SQL Server 2019는 메모리 최적화 테이블에서 일부 할당 메타 데이터를 처리 할 수 ​​있습니다.

동시 PFS 변경을 지원하기 위해 SQL Server 2019에서 또 다른 변경이 이루어졌습니다. 이는 일반적으로 할당시 메모리 내 구조에 대한 경합이 PAGELATCH_*대기하는 것입니다.

  1. hot spotting은 tempdb에서 상황을 훨씬 더 악화시키는 것은 무엇입니까?

아무것도 IMHO. 예, TempDB에는 직접 사용하지 않고 쓰기를 유발할 수있는 더 많은 항목이 있으므로 일부 항목을 방해 할 수 있습니다. 그러나 데이터 변경 속도 측면에서 매우 바쁜 사용자 데이터베이스는 그다지 좋지 않습니다. TempDB에만 국한되지 않습니다.

  1. DB의 어떤 특정한 것들이 훨씬 더 나빠질까요?

나는 Aaron의 비유를 정말로 좋아한다! 그것이 무슨 일이 일어나고 있는지의 본질입니다. 실제로 악화되는 것은 데이터베이스의 객체에 대한 공간 할당 및 추적입니다. 사용자 데이터베이스가 대부분 정적이거나 (변화율이 낮음) TempDB를 실제로 사용하지 않는 경우 아무 것도 알 수 없습니다. 그러나 상당히 바쁜 서버 인 경우 페이지 래치 대기를 시작하거나 악화시켜 호송대를 막을 수 있습니다.

Aaron은 이미 이전 버전에는 균일 한 범위를 사용하고 파일 그룹의 모든 파일이 함께 성장하도록 추적 플래그가 있음을 지적했습니다 (Aaron은 2016+의 NOP 인 1117과 1118을 지적합니다). 내가 다시 지적하고 싶은 또 다른 것은 이것은 TempDB뿐만 아니라 모든 데이터베이스를위한 것이며 물리적 레이아웃은 필요에 따라 생각되어야한다는 것입니다.

이는 핫스팟 문제 일뿐 아니라 백업 / 복원, 파일 관리, 파일 시스템 메타 데이터 조각화 등과 같은 시스템의 다른 부분에도 적용 할 수 있으며, 여러 파일을 사용하면 도움이 될 수 있습니다.

waitresourcePFS 페이지 (1 페이지 후 8088 페이지마다) 를 찾아 할당 구조 경합을 볼 수 있습니다 . 동일한 파일 (2 : file : page)에 모두있는 경우 이것이 발생하고 있음을 알 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.