2012-02-24 19 views
5

Giải pháp phổ biến nhất và dễ thực hiện để cải thiện tốc độ cho cơ sở dữ liệu SQL Server 2008R2 là gì & .Net 3.5.Có khả thi để cải thiện hiệu năng của máy chủ SQL với bộ nhớ đệm không?

Chúng tôi có một ứng dụng với các thuộc tính sau:
- số lượng nhỏ khách hàng đồng thời (~ 200 tại MOST).
- hoạt động toán học phức tạp về phía máy chủ SQL
- chúng ta đang bắt chước cái gì đó để oracle của row-level security (Vì vậy sử dụng và storedprocs tvf thay vì bảng trực tiếp truy vấn) -Các Vấn đề chính là người dùng thực hiện lượng cao cập nhật/chèn/xóa/tính toán, và họ freak ra bởi vì họ cần phải chờ đợi cho các trang để tải lại trong khi những hành động được thực hiện.

Các câu hỏi tôi cần làm rõ về như sau:

  1. là gì nhanh hơn: trở về toàn bộ dữ liệu từ máy chủ sql và thực hiện các chức năng toán học trên # bên C, hoặc thực hiện các chức năng tính toán về phía sql (do đó, không trở về cột bổ sung). Hoặc là nó chỉ phụ thuộc phần cứng?
  2. Bộ nhớ đệm sẽ cải thiện hiệu suất (Ví dụ: nếu chúng tôi thêm bộ nhớ cache redis). Hoặc các giải pháp bộ nhớ đệm chỉ khả thi cho số lượng lớn khách hàng?
  3. Thực tiễn không tốt là tính toán trước một số dữ liệu và lưu trữ ở đâu đó trong cơ sở dữ liệu (do đó, khi người dùng sẽ yêu cầu, nó sẽ được tính toán). Hoặc đây là những gì bộ nhớ đệm giả sử để làm gì? Nếu đây không phải là một thực hành không tốt, làm cách nào để cấu hình máy chủ SQL để thực hiện các phép tính khi có sẵn các tài nguyên?
  4. Cách bộ nhớ đệm có thể cải thiện hiệu suất nếu nó vẫn cần phải chuyển đến cơ sở dữ liệu và xem có bản ghi nào được cập nhật không?

đề xuất chung và nhận xét cũng được hoan nghênh.

Trả lời

7

Hãy tách riêng câu trả lời cho hai phần, hiệu suất thực hiện truy vấn và bộ nhớ đệm của bạn để cải thiện hiệu suất đó. Tôi tin rằng bạn nên bắt đầu với việc giải quyết tải trên máy chủ SQL của bạn và cố gắng tối ưu hóa quá trình chạy trên nó đến mức tối đa, điều này sẽ giải quyết hầu hết sự cần thiết phải thực hiện bất kỳ bộ nhớ đệm nào.

Từ câu hỏi của bạn, có vẻ như bạn có hệ thống được sử dụng cho cả xử lý giao dịch và cũng cho tổng hợp/tính toán, điều này thường dẫn đến xung đột khi hai nhiệm vụ này khóa mỗi tài nguyên khác. Truy vấn dài thực hiện các phép toán có thể khóa/giữ một đối tượng được yêu cầu bởi giao diện người dùng. Tối ưu hóa các hệ thống này để làm việc song song và cải thiện hiệu quả truy vấn là chìa khóa để tăng hiệu suất.

Để bắt đầu, tôi sẽ sử dụng câu hỏi của bạn. Nhanh hơn là gì? phụ thuộc vào tập hợp thực tế mà bạn đang thực hiện, nếu bạn đang xử lý các hoạt động được đặt, nghĩa là SUM/AVG của một cột, giữ nó trong SQL, mặt khác nếu bạn thấy mình có con trỏ trong quy trình, hãy di chuyển nó đến C#. Con trỏ sẽ giết hiệu suất của bạn! Bạn đã hỏi liệu có thực hành xấu để tổng hợp dữ liệu sang một bên và sau đó truy vấn kho lưu trữ đó, đây là phương pháp hay nhất :). Bạn sẽ kết thúc với việc có một cơ sở dữ liệu phục vụ các khách hàng giao dịch, có nhịp độ cao và một cơ sở dữ liệu khác lưu trữ thông tin tổng hợp, điều này sẽ nhanh chóng và dễ dàng có sẵn cho các nhu cầu khác của bạn. Việc chuyển sang bước tiếp theo sẽ dẫn đến việc bạn có kho dữ liệu, vì vậy đây chắc chắn là nơi bạn muốn hướng đến khi bạn có nhiều thông tin và tính toán.

Cuối cùng, bộ nhớ đệm, điều này phức tạp và thực sự phụ thuộc vào bản chất cụ thể của nhu cầu của bạn, tôi muốn nói cách tiếp cận trên, dành thời gian trong việc cải thiện quy trình và tôi mong đợi kết quả cuối cùng sẽ làm cho bộ nhớ đệm thừa.

Một trong những người bạn tốt nhất của bạn cho nhiệm vụ là SQL Profiler, chạy một dấu vết trên stmt: hoàn thành để xem thời gian cao nhất/io/cpu và chọn trên chúng đầu tiên là gì.

Chúc may mắn!

+1

Chắc chắn đồng ý về SQL Profiler –

Các vấn đề liên quan