2011-10-19 22 views
6

Tôi đang làm việc trên luồng công việc như hệ thống. Tôi có một bảng nhiệm vụ và trường trạng thái. Giá trị cho trạng thái có thể là một trong những Mới, sẵn sàng, xử lý, lỗi, hủy bỏ, thực hiện.Thực hành tốt nhất để thiết kế bảng để hỗ trợ cập nhật một trường nhanh hơn bằng máy chủ sql

Tôi có khoảng 7 quy trình sẽ được kích hoạt dựa trên tình huống khác nhau để thay đổi giá trị của trạng thái công việc. Hầu hết thời gian mỗi quá trình sẽ làm việc trên tập dữ liệu của riêng nó và mỗi lần nó chỉ xử lý lên đến 5000 bản ghi. Nhưng tôi vẫn thấy một số bế tắc nếu dữ liệu đạt khoảng 2 triệu bản ghi. Tôi kiểm tra với SQL Profiler, trông giống như một số tài nguyên trang liên quan. Tôi không tốt ở điều chỉnh hiệu suất máy chủ sql và không hiểu nó rất tốt.

Vì nhiệm vụ không hoạt động sẽ được lưu trữ mỗi ngày, tôi đang suy nghĩ để thiết kế lại bảng để hỗ trợ khoảng 10 triệu bản ghi.

ít sự lựa chọn có thể là:

  1. Tạo bảng phân chia dựa trên trạng thái.
  2. Tạo một bảng tổng thể với các dữ liệu tĩnh và bảng hỗ trợ dựa trên tình trạng

Có bất kỳ thực hành tốt cho loại tình hình?

Cảm ơn!

+0

Cảm ơn bạn Siva, chúng tôi đang sử dụng SQL Server 2005 +. Và sẽ áp dụng cách ly như bạn đã đề xuất. Nhưng chúng tôi không yêu cầu khách hàng đó phải có Enterprise SQL Server. Vì vậy, phân vùng có thể là lựa chọn cho một số khách hàng có thể trả nhiều tiền hơn. –

+0

Bảng nhiệm vụ có chỉ mục nhóm được xác định không? – gonsalu

+0

Có. TaskId là khóa chính và kiểu int. Tôi đã cố gắng làm cho nó không được nhóm lại. Nhưng hiệu suất còn tệ hơn nữa. –

Trả lời

0
  • Bạn có thể phân vùng bảng dựa trên cột trạng thái. Active Records trong một phân vùng. Các hồ sơ đã đóng trong một đơn khác
  • Hàng tháng, bạn cũng có thể xóa các hồ sơ đã đóng (Xóa nếu không còn yêu cầu) hoặc chuyển đến Bảng lưu trữ
  • Bảng phân chia Tôi không nghĩ nó sẽ là lựa chọn tốt hơn (Bạn không cần các bảng multuple cho cùng chức năng)
  • Để tránh bế tắc, phiên bản SQL Server nào bạn đang sử dụng
  • Nếu bạn đang sử dụng SQL 2005 trở lên Sử dụng Read Committed Snapshot Isolation để đọc dữ liệu đã cam kết. Điều này sẽ đảm bảo bạn đọc không chặn viết
0

Tôi biết tôi nên đăng câu trả lời, nhưng với những câu hỏi câu trả lời có thể làm theo:

1.) Are gợi ý bảng tại chỗ? Nếu không, sau đó thử nghiệm áp dụng các số

2.) Tất cả chỉ mục có sẵn được sử dụng và cột TaskId chỉ có thể chấp nhận được? Đôi khi, một số tình huống nhất định khi được phân tích sẽ mang lại sự cần thiết cho chỉ mục mới

3.) Có phải tất cả 2 triệu bản ghi trực tiếp/hoạt động tại một thời điểm nhất định không?

4.) Bạn đã kiểm tra chỉ mục bị phân mảnh chưa? lưu trữ hàng ngày có thể gây ra chỉ số phân mảnh, vì vậy bạn có thể muốn thêm vào cuối của công việc lưu trữ của bạn một bước để kiểm tra và sửa chữa sự phân mảnh

5.) lĩnh vực Status cho new, ready, processing, error, abort, done là dưới loại dữ liệu nào?

6.) Bạn đã thử nghiệm trên các chế độ xem được lập chỉ mục chưa?Nếu bạn đã biết rằng bạn đang giới hạn một số dữ liệu nhất định và muốn tránh quét bảng, bạn có thể giúp

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