Phương pháp tìm cờ theo dõi mới trong SQL Server


38

Có rất nhiều Trace Flag ngoài kia. Một số tài liệu tốt, một số thì không, và một số khác tìm thấy trạng thái hành vi mặc định trong bản phát hành năm 2016. Ngoài các kênh hỗ trợ chính thức, nhân viên của Microsoft, v.v., các cách để tìm cờ theo dõi mới là gì?

Tôi đã đọc qua một vài bài viết gần đây của Aaron Bertrand ở đâyđây , nhưng không phát hiện ra bất cứ điều gì về Trace Flag mới.

Tôi đã sao chép dữ liệu và tệp nhật ký của mssqlsystemresource sang một vị trí mới và đính kèm nó như một cơ sở dữ liệu thông thường để chọc qua các bảng và khung nhìn hệ thống, nhưng không phát hiện ra điều gì ngay lập tức. Tôi đã cân nhắc việc lấy một danh sách các Cờ Trace đã biết và lặp qua các số không có trong danh sách đó, để xem DBCC TRACEON nào sẽ cho phép, nhưng trước tiên muốn đặt câu hỏi ở đây.

Giả sử rằng lệnh DBCC để cho phép họ phải đăng nhập bằng một số tài nguyên để đảm bảo Cờ theo dõi là hợp lệ, nó sẽ vươn tới đâu? Có một tập tin hay một số hệ thống khác chứa một danh sách?

Tôi biết câu hỏi tạo ra một mạng lưới rộng, nhưng điều này đã thúc đẩy việc đọc về Cờ Trace với hành vi dự định cụ thể bên cạnh một tính năng mới trong năm 2016 không có hiệu ứng được mô tả. Suy nghĩ ban đầu của tôi là có lẽ các con số đã được hoán đổi bằng cách nào đó, như 7129 trở thành 7219. Tôi hy vọng sẽ có được một danh sách các cờ theo dõi hợp lệ trong phạm vi, ví dụ 7000-7999, để tìm kiếm hoán vị. Việc kiểm tra tất cả, cả cờ DBCC TRACEON và các tham số khởi động sẽ khá phiền toái, kết hợp với kiểm tra kết quả chống lại hành vi tính năng.

Câu trả lời:


42

Bạn không thể làm gì để tìm danh sách ngoại trừ hỏi hoặc chọn chúng từ các bài đăng / sàn trượt / v.v. Danh sách chỉ tồn tại trong mã, trong tệp tiêu đề nơi số cờ theo dõi hợp lệ được ánh xạ tới các tên trong một enum lớn trong mã C ++ và sau đó các tên được sử dụng trong phần còn lại của mã.

Như Aaron đã nói, bạn có thể kích hoạt bất kỳ số cờ theo dõi nào và nếu nó không làm gì hoặc bạn không thực hiện chức năng mà cờ theo dõi có liên quan, bạn sẽ không nhận thấy bất kỳ sự khác biệt nào trong hành vi.

DBCC TRACEON không kiểm tra bất cứ điều gì - vì không có danh sách thời gian chạy nào có số nào hợp lệ hay không - nó chỉ cho phép số cờ theo dõi đó trong một bitmap về những cờ nào được đặt cho kết nối đó / trên toàn cầu.

Vấn đề với việc kiểm tra tính hợp lệ là sẽ phơi bày cờ theo dõi nào là hợp lệ, cho phép chúng được phát hiện. Bằng cách này, 'danh sách hợp lệ' bị che khuất một cách hiệu quả, đó là điều mà nhóm SQL muốn.

Về đề xuất của Kin trong một nhận xét rằng SQL Server nên có select * from sys.available_trace_flags- Có và không. Có nhiều cờ theo dõi rất bất lợi cho hiệu suất và chỉ cần thiết để gỡ lỗi các vấn đề theo hướng dẫn từ Bộ phận hỗ trợ sản phẩm, nhưng SQL Server có thể liệt kê các cờ 'an toàn'.


2
Một điều chỉnh nhỏ - DBCC TRACEON thực sự kiểm tra một cái gì đó. Đang ý chính chương trình này mà vòng qua cờ dấu vết bắt đầu từ 1. Tất cả các phiên bản hiện hành của SQL Server sẽ nổ ra và ném ra một lỗi tại số dấu vết cờ hiện tại tối đa: gist.github.com/BrentOzar/0e9692da8ceffeb2b4bdd064e36d3174
Brent Ozar

41

Cách để tìm cờ theo dõi mới là gì?

Đối với hầu hết các phần, nó có được thời gian và nguồn lực cảm xúc để dành cho việc tìm kiếm chúng.

Chắc chắn, có thể viết một kịch bản để lặp qua các số cờ theo dõi có thể và phân tích các hiệu ứng, nhưng điều này không phải lúc nào cũng hiệu quả. Có nhiều lý do cho điều đó, nhưng sự thất vọng phổ biến bao gồm thực tế là một số cờ theo dõi chỉ có hiệu quả khi kết hợp với những cái khác, một số chỉ hoạt động -Tkhi khởi động hoặc khi được sử dụng với DBCC TRACEON, một số chỉ với OPTION (QUERYTRACEON). Một số yêu cầu các lệnh không có giấy tờ, hoặc phần mở rộng lệnh hoặc cho một tính năng cụ thể cũng được bật. Một số chỉ tạo ra hiệu ứng nếu bạn biết nơi để tìm những hiệu ứng đó. Và cứ thế và ... rất nhiều ... vân vân.

Điều đó nói rằng, có lẽ kỹ thuật hiệu quả nhất là từng bước thực hiện một truy vấn hoặc lệnh cụ thể với trình gỡ lỗi hoặc công cụ định hình khác được đính kèm, so sánh các đường dẫn được thực hiện với (các) cờ theo dõi và tắt. Nếu điều này nghe có vẻ tốn thời gian, đó là vì nó là.

Đối với tôi, một cái gì đó phải có tiềm năng rất thú vị, hoặc liên quan đến một vấn đề trong thế giới thực mà không có giải pháp tốt hơn để tôi thậm chí nghĩ về việc thâm nhập nó. Nó cũng hữu ích nếu bạn đã trải qua quá trình này hàng trăm hoặc hàng nghìn lần trước đây, để có được cảm giác rộng rãi về loại thứ bạn đang tìm kiếm, phạm vi cờ theo dõi nào có khả năng hiệu quả nhất và phần nào của codebase sẽ rất thú vị.

Đặt điểm dừng CSessionTraceFlags::CheckSessionTraceInternalvà kiểm tra giá trị của thanh edxghi (để xem cờ theo dõi nào đang được kiểm tra) có thể hữu ích trong các trường hợp đơn giản, nhưng các trường hợp thú vị thường không đơn giản - và không phải tất cả các cờ theo dõi đều được kiểm tra tại điểm mà chúng ảnh hưởng đến đường dẫn mã được thực hiện.

Có một danh sách khá nhỏ các cờ theo dõi chính thức . Đây là những cờ đã được kiểm tra đầy đủ và được (và sẽ) được hỗ trợ bởi CSS và cuối cùng là các nhà phát triển sản phẩm. Chúng cũng là các cờ với trường hợp sử dụng đủ phổ biến để có giá trị tài liệu.

Bất kỳ cờ theo dõi nào khác bạn tìm thấy là một sự tò mò có thể có tác dụng không mong muốn trong các tình huống khác nhau (các bản dựng khác nhau, SKU, cài đặt bảo mật, các tính năng khác nhau ... bất cứ điều gì khác bạn có thể hoặc không thể nghĩ tới). Những điều này sẽ chỉ được 'hỗ trợ' bởi người đã viết về chúng, nếu có.

Có một số danh sách không chính thức, danh sách tốt nhất mà tôi biết là Bộ sưu tập cờ máy chủ SQL của Aaron Morelli (hiện tại v6, tháng 4 năm 2016).

Tất cả những gì đã nói, Microsoft CSS (cuối cùng) có quyền truy cập vào tất cả các cờ theo dõi, vì vậy họ có thể tư vấn cho bạn về bất kỳ điều gì bạn gặp, ngay cả khi chúng không có trong danh sách chính thức. Họ có thể chọn không nói bất cứ điều gì, tất nhiên, và có thể có một khoản phí liên quan; Tôi thực sự không biết, bản thân mình chưa bao giờ đi theo con đường đó.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.