SQL Server에서 새 추적 플래그를 찾는 방법


38

트레이스 플래그가 많이 있습니다. 일부는 잘 문서화되어 있고, 일부는 문서화되지 않았으며, 다른 일부는 2016 릴리스에서 기본 동작 상태로가는 길을 찾았습니다. 공식 지원 채널, Microsoft 직원 등을 제외하고 새로운 추적 플래그를 찾는 방법은 무엇입니까?

나는 아론 베르 몇 가지 최근의 게시물을 읽었습니다 여기여기에 있지만, 새 추적 플래그에 대해 아무것도 발견하지 않았다.

mssqlsystemresource의 데이터 및 로그 파일을 새 위치에 복사하고 일반 데이터베이스처럼 연결하여 시스템 테이블과 뷰를 찌르지 만 즉시 아무것도 발견하지 못했습니다. DBCC TRACEON이 허용 할 수있는 항목을 확인하기 위해 알려진 추적 플래그 목록을 가져와 해당 목록에없는 숫자를 반복하는 것을 고려했지만 여기서 먼저 질문을하고 싶었습니다.

DBCC 명령을 사용하도록 설정하려면 추적 플래그가 유효한지 확인하기 위해 일부 리소스를 체크인해야한다고 가정하면 어디에서 도달합니까? .dll 또는 목록을 보유한 다른 시스템 파일이 있습니까?

나는 그 질문이 넓은 그물을 던진다는 것을 알고 있지만, 2016 년 새로운 기능과 함께 의도 된 특정 행동을 가진 Trace Flag에 대해 읽은 것은 설명 된 효과가 없었습니다. 내 초기 생각은 아마도 7129가 7219가되는 것과 같이 숫자가 어딘가에 옮겨 졌다는 것입니다. 나는 순열을 찾기 위해 7000-7999와 같은 범위 내에서 유효한 추적 플래그 목록을 얻고 싶었습니다. DBCC TRACEON 플래그와 시작 매개 변수 모두를 모두 테스트하는 것은 기능 동작에 대한 결과 테스트와 함께 매우 성가신 일입니다.

답변:


42

게시물 / 슬라이드 데크 등에서 요청하거나 선택하는 것 외에는 목록을 찾을 수 없습니다. 이 목록은 코드, 유효한 추적 플래그 번호가 C ++ 코드에서 큰 열거 형으로 이름이 매핑 된 헤더 파일에만 존재하며 그 이름은 나머지 코드에서 사용됩니다.

Aaron이 말했듯이 추적 플래그 번호를 활성화 할 수 있으며, 아무 것도하지 않거나 추적 플래그와 관련된 기능을 수행하지 않으면 동작의 차이를 느끼지 못할 것입니다.

DBCC TRACEON 어떤 숫자가 유효한지 런타임 목록이 없기 때문에 아무것도 확인하지 않습니다. 해당 연결 / 전역에 대해 어떤 플래그가 설정되어 있는지 비트 맵으로 추적 플래그 번호를 활성화합니다.

유효성 검사의 문제점은 어떤 추적 플래그가 유효한지 표시하여이를 발견 할 수 있다는 것입니다. 이런 식으로 '유효한 목록'이 효과적으로 난독 처리되어 SQL 팀이 원하는 것입니다.

SQL Server의 의견에서 Kin의 제안에 대해 select * from sys.available_trace_flags-예 및 아니요. 성능에 매우 유해한 많은 추적 플래그가 있으며 제품 지원 부서의 안내에 따라 문제를 디버깅하는 데만 필요하지만 SQL Server는 '안전한'플래그를 나열 할 수 있습니다.


2
한 가지 사소한 조정-DBCC TRACEON은 실제로 무언가를 확인합니다. 이 요지는 1부터 시작하여 추적 플래그를 반복하는 코드를 보여줍니다. 현재 모든 SQL Server 버전은 최대 현재 추적 플래그 번호에서 오류를 발생 시킵니다
Brent Ozar

41

새로운 추적 플래그를 찾는 방법은 무엇입니까?

대부분의 경우 시간과 정서적 자원을 찾는 데 소요됩니다.

확실히, 가능한 추적 플래그 번호를 반복하고 효과를 분석하는 스크립트를 작성할 수 있지만 이것이 항상 유익한 것은 아닙니다. 그 이유에는 여러 가지가 있지만 일반적인 좌절에는 일부 추적 플래그가 다른 추적 플래그와 함께 만 유효하고 일부 -T는 시작시 DBCC TRACEON에만 사용하거나 일부 와 함께 사용하는 경우 에만 작동한다는 사실이 포함 됩니다 OPTION (QUERYTRACEON). 일부는 문서화되지 않은 명령 또는 명령 확장이 필요하거나 특정 기능도 사용 가능하게해야합니다. 일부는 해당 효과를 찾을 위치를 알고있는 경우에만 효과를냅니다. 그리고 등등 ... 아주 많이 ... 등등.

즉, 아마도 가장 효과적인 기술은 특정 플래그 또는 명령 실행을 단계별로 실행하는 것입니다. 디버거 또는 다른 프로파일 링 도구가 연결된 상태에서 추적 플래그가 설정된 경로를 켜고 끄는 것입니다. 시간이 오래 걸리는 소리 인 것 같습니다.

나에게있어 뭔가 흥미로운 점이 있거나 실제 문제와 관련이 있거나 더 나은 해결책이 없어도 문제가 될 수있다. 수백 또는 수천 번 전에이 프로세스를 거친 적이있는 경우, 원하는 종류의 추적 플래그가 가장 효과적 일 수있는 부분과 어떤 부분에 대해 폭 넓은 느낌을 얻는 것이 유용합니다. 코드베이스의 흥미로운 것입니다.

중단 점을 설정 CSessionTraceFlags::CheckSessionTraceInternal하고 edx레지스터 값을 확인하여 (어떤 추적 플래그가 점검되고 있는지 확인하는) 간단한 경우에는 유용 ​​할 수 있지만 흥미로운 경우는 그리 간단하지는 않습니다. 코드 경로에 영향을 미칩니다.

공식 추적 플래그의 목록은 다소 작습니다 . 이들은 완전히 테스트되었으며 CSS와 궁극적으로 제품 개발자가 지원하는 플래그입니다. 또한 문서화 할 가치가있는 일반적인 유스 케이스가있는 플래그입니다.

찾은 다른 추적 플래그는 다양한 상황 (다른 빌드, SKU, 보안 설정, 다른 기능 ... 생각할 수 있거나 생각할 수없는 것)에 예기치 않은 영향을 줄 수있는 호기심입니다. 이것들은 그들에 대해 쓴 사람에 의해서만 '지원'될 것입니다.

비공식 목록이 여러 개 있는데, 내가 아는 가장 좋은 것은 Aaron Morelli (현재 2016 년 4 월 v6) 의 SQL Server 플래그의 주제 모음입니다 .

그러나 Microsoft CSS는 (궁극적으로) 모든 추적 플래그에 액세스 할 수 있으므로 공식 목록에없는 경우에도 사용자가 발견 한 사항에 대해 조언 할 수 있습니다. 물론 아무 말도하지 않기로 선택할 수 있으며, 수수료가 부과 될 수 있습니다. 나는 정말로 자신을 그 길로 가지 않았다 몰라요.


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