2008-08-12 13 views
6

Jeff đã đề cập trong một trong những podcast mà một trong những điều anh ta luôn làm là đặt thiết bị cho các cuộc gọi cơ sở dữ liệu, để anh ta có thể biết truy vấn nào đang gây chậm đi. trước đây bằng cách sử dụng SQL Profiler, nhưng tôi quan tâm đến những chiến lược mà những người khác đã sử dụng để bao gồm điều này như là một phần của ứng dụng.Truy cập cơ sở dữ liệu dụng cụ

Chỉ đơn giản là trường hợp bao gồm một bộ đếm thời gian trên mỗi cuộc gọi cơ sở dữ liệu và ghi nhật ký kết quả, hoặc có cách nào để làm điều đó? Có thể có một khuôn khổ thực hiện điều này cho bạn hoặc có một lá cờ tôi có thể bật trong ví dụ: LINQ-to-SQL sẽ cung cấp chức năng tương tự.

Tôi chủ yếu sử dụng C# nhưng cũng quan tâm đến việc xem các phương thức từ các ngôn ngữ khác nhau và tôi quan tâm hơn đến cách 'mã' thực hiện điều này trên phương pháp nền tảng db như SQL Profiler.

Trả lời

1

Nếu truy vấn nhiều hơn thì chỉ cần một SELECT đơn giản trên một bảng duy nhất, tôi luôn chạy nó thông qua GIẢI THÍCH nếu tôi đang sử dụng MySQL hoặc PostgreSQL. Nếu bạn đang sử dụng SQL Server thì Management Studio có một Kế hoạch thực hiện ước tính hiển thị, về bản chất là giống nhau. Nó rất hữu ích để xem làm thế nào động cơ sẽ truy cập vào mỗi bảng và những gì nó sẽ sử dụng chỉ mục. Đôi khi nó sẽ làm bạn ngạc nhiên.

0

Nếu bạn đang viết truy vấn trong SQL Management Studio, bạn có thể nhập: SET STATISTICS TIME ON và Máy chủ SQl sẽ cho bạn biết các phần riêng lẻ của truy vấn đã phân tích cú pháp, biên dịch và thực thi như thế nào. Bạn có thể đăng nhập thông tin này bằng cách xử lý sự kiện InfoMessage của lớp SqlConnection (nhưng tôi nghĩ rằng việc sử dụng SQL Profiler dễ dàng hơn nhiều.)

1

Ghi các cuộc gọi cơ sở dữ liệu, tổng thời gian và số lượng bản ghi (byte) trở lại trong ứng dụng là hữu ích, nhưng nó sẽ không cung cấp cho bạn tất cả các thông tin bạn cần.

Nó có thể hiển thị cho bạn các mẫu sử dụng mà bạn không mong đợi. Nó có thể hiển thị nơi bạn sử dụng truy cập "từng hàng" thay vì hoạt động "được đặt dựa trên".

Công cụ tốt nhất để sử dụng là SQL Profiler và phân tích số lượng "Đọc" so với CPU và thời lượng. Bạn muốn tránh các truy vấn CPU cao, thời lượng đọc cao và dài (duh!).

"Nhóm theo lần đọc" là một tính năng hữu ích để mang đến cho các truy vấn nhanh nhất.

0

Tôi đã nghĩ rằng điều quan trọng cần hỏi ở đây là "bạn đang sử dụng nền tảng cơ sở dữ liệu nào?" Ví dụ, trong Sybase, việc cài đặt MDA tables có thể giải quyết vấn đề của bạn, chúng cung cấp toàn bộ số liệu thống kê từ việc sử dụng cuộc gọi thủ tục đến mức trung bình I/O, thời gian CPU và mức độ chỉ mục. Nó có thể thông minh như bạn muốn.

0

Tôi chắc chắn thấy giá trị khi sử dụng SQL Profiler trong khi ứng dụng đang chạy, và GIẢI THÍCH hoặc SET STATISTICS sẽ cung cấp cho bạn thông tin về các truy vấn riêng lẻ, nhưng có ai đó thường đặt điểm đo vào mã của họ để thu thập thông tin về truy vấn cơ sở dữ liệu đang diễn ra - ví dụ như truy vấn trên bảng thực hiện tốt ban đầu, nhưng khi số lượng hàng tăng lên, trở nên chậm hơn và chậm hơn.

Nếu bạn đang sử dụng MySQL hoặc Postgre có nhiều công cụ khác nhau để xem hoạt động truy vấn trong thời gian thực, nhưng tôi chưa tìm thấy công cụ nào tốt như SQL Profiler để đo hiệu suất truy vấn theo thời gian.

Tôi tự hỏi nếu có (hoặc phải là?) Một cái gì đó tương tự như ELMAH theo cách nó chỉ cắm vào và cung cấp cho bạn thông tin mà không cần thêm nhiều nỗ lực?

0

Nếu bạn đang sử dụng Firebird, bạn có thể muốn xem sinatica.com.
Chúng tôi sẽ sớm khởi chạy công cụ giám sát thời gian thực cho Firebird DBA.

</shameless plug>

0

Nếu bạn sử dụng Hibernate (Tôi sử dụng phiên bản Java, tôi tưởng tượng NHibernate có một cái gì đó tương tự), bạn có thể có Hibernate thu thập thống kê về rất nhiều thứ khác nhau. Xem, ví dụ:

http://www.javalobby.org/java/forums/t19807.html