Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Hiệu suất của các cách tiếp cận khác nhau đối với dữ liệu dựa trên thời gian

Một mặt, thật tốt là bạn đã mở ra một câu hỏi mới. Nhưng mặt khác, bằng cách trích xuất một truy vấn và hỏi xem nó có thực hiện nhanh hơn hay không, làm mất ngữ cảnh của câu hỏi trước, câu hỏi mới quá cô lập. Như tôi chắc chắn bạn đã biết, quản trị cơ sở dữ liệu, quản lý tài nguyên (bộ nhớ / bộ đệm, đĩa, chu kỳ CPU), quản lý mã (tốt hay kém) sử dụng các tài nguyên đó, tất cả đều là một phần của toàn bộ bức tranh. Hiệu suất là một trò chơi giao dịch, không có gì là miễn phí.

  1. Vấn đề quan trọng nhất mà tôi gặp phải, đó là sự trùng lặp của cột Ngày kết thúc, cột này rất dễ dẫn đến. Các cột trùng lặp tương đương với Cập nhật Bất thường. Smirkingman đã cung cấp một ví dụ cổ điển:một số truy vấn sẽ nhận được một kết quả và các truy vấn khác sẽ nhận được kết quả khác. Điều đó đơn giản là không thể chấp nhận được là các tổ chức lớn; hoặc tại các ngân hàng (ít nhất là ở các nước phát triển) nơi dữ liệu được kiểm toán và bảo vệ. Bạn đã vi phạm quy tắc Chuẩn hóa cơ bản và có các hình phạt phải trả.

    • Cập nhật Anomailes; hai phiên bản (đã có chi tiết). Kiểm toán viên có thể không vượt qua hệ thống.

    • Kích thước bảng
      Trong bất kỳ bảng lớn nào, đó là một vấn đề, và đặc biệt là trong chuỗi thời gian hoặc dữ liệu tạm thời, trong đó số lượng cột nhỏ và số lượng hàng rất lớn. Vì vậy, những gì, một số sẽ nói, không gian đĩa là rẻ. Vâng, các bệnh STD cũng vậy. Điều quan trọng là nó được sử dụng để làm gì và người ta chăm sóc nó như thế nào.

      • Dung lượng đĩa
        có thể rẻ trên PC, nhưng trong máy chủ sản xuất thì không. Về cơ bản, bạn đã thêm 62% vào kích thước hàng (13 cộng 8 bằng 21) và do đó kích thước bảng. Tại ngân hàng mà tôi đang được phân công, mỗi bộ phận sở hữu dữ liệu được tính phí như sau, lưu trữ dựa trên SAN là tất cả. Số liệu tính theo GB mỗi tháng (đây không phải là ngân hàng Úc cao cấp):

        $ 1,05 cho RAID5 Unmirrored
        (chúng tôi biết nó chậm, nhưng nó rẻ, chỉ cần không đặt thông tin quan trọng vào nó, vì nếu nó bị hỏng, sau khi đĩa mới nóng hoặc lạnh được trao đổi vào, phải mất nhiều ngày nó sẽ tự đồng bộ hóa lại.)

        $ 2,10 cho RAID5 Mirrored
        Trong SAN, nghĩa là.

        $ 4,40 cho RAID1 + 0
        Tối thiểu cho dữ liệu Sản xuất, sao lưu nhật ký giao dịch và kết xuất cơ sở dữ liệu hàng đêm.

        $ 9,80 cho RAID1 + 0 được sao chép
        sang một Bố cục SAN giống hệt nhau tại một trang web khác, chống bom. Cắt giảm sản lượng trong vài phút; gần như không mất giao dịch.

      • Bộ nhớ / Bộ nhớ đệm
        Ok, Oracle không có nhưng các dbs ngân hàng nghiêm túc thì có bộ nhớ đệm và chúng được quản lý. Với bất kỳ kích thước bộ nhớ cache cụ thể nào, chỉ 62% hàng sẽ vừa với cùng một kích thước bộ nhớ cache.

      • Logical &Physical I / O
        Có nghĩa là thêm 50% I / O để đọc bảng; cả luồng vào bộ nhớ cache và đọc đĩa.

  2. Do đó, liệu truy vấn hoạt động tốt hơn hay tệ hơn một cách riêng biệt, là một vấn đề học thuật. Trong ngữ cảnh ở trên, bảng chậm và hoạt động kém hơn 62%, mọi lúc, mọi nơi. Và nó đang ảnh hưởng đến mọi người dùng khác trên máy chủ. Hầu hết các DBA sẽ không quan tâm (tôi chắc chắn sẽ không) nếu biểu mẫu truy vấn con hoạt động với tốc độ một nửa, bởi vì phần thưởng của chúng gắn liền với việc chấp nhận kiểm tra, không chỉ hiệu suất mã.

    • Bên cạnh đó, có thêm lợi ích là không bao giờ phải truy cập lại mã và sửa các giao dịch do Cập nhật Bất thường.

    • Và các giao dịch có ít điểm để cập nhật hơn, vì vậy chúng nhỏ hơn; ít khóa chặn hơn, v.v.

  3. Đồng ý, rằng thảo luận trong Bình luận là khó khăn. Trong Câu trả lời của tôi, tôi đã trình bày chi tiết và giải thích hai truy vấn con. Có một sự hiểu lầm:bạn đang nói về truy vấn con này (trong mệnh đề WHERE, một truy vấn con bảng ) và tôi đang nói về truy vấn con khác (trong danh sách cột, truy vấn con vô hướng ) khi tôi nói rằng nó hoạt động nhanh hơn hoặc nhanh hơn. Bây giờ điều đó đã được xóa, tôi không thể nói rằng truy vấn đầu tiên ở trên (truy vấn con trong mệnh đề WHERE, một bảng) sẽ thực hiện nhanh như truy vấn thứ hai (với cột trùng lặp); người đầu tiên phải thực hiện 3 lần quét, trong đó người thứ hai chỉ thực hiện 2 lần quét. (Tôi dám chắc lần thứ hai sẽ quét bảng.)

    Vấn đề là, ngoài vấn đề cô lập, nó không phải là một so sánh công bằng, tôi đã đưa ra nhận xét về truy vấn con vô hướng. Tôi không đề xuất truy vấn 3 quét nhanh bằng hoặc nhanh hơn truy vấn 2 quét.

    Tuyên bố tôi đã đưa ra về truy vấn phụ bảng 3 quét (mà tôi trích dẫn ở đây) cần được thực hiện trong ngữ cảnh đầy đủ (hoặc bài đăng đó trong toto hoặc ở trên). Tôi không lùi bước trước nó.

    Tôi dành nửa cuộc đời để loại bỏ các lựa chọn thay thế bất hợp pháp chẳng hạn như các cột trùng lặp, được dự đoán về vấn đề hiệu suất, với những người sáng tạo tụng thần chú thì bảng chậm, vì vậy họ đã "không chuẩn hóa cho hiệu suất". Kết quả, có thể dự đoán trước khi tôi bắt đầu, là một bảng có kích thước bằng một nửa, hoạt động nhanh gấp đôi tổng thể . Loạt bài Thời báo là câu hỏi phổ biến nhất ở đây (liên kết liên kết đến một câu hỏi khác; liên kết này liên kết đến một câu hỏi khác), nhưng hãy tưởng tượng vấn đề trong cơ sở dữ liệu ngân hàng:daily OpeningExposureClosingExposure per Security per Holding per UnitTrust per Portfolio .

  4. Nhưng hãy để tôi trả lời một câu hỏi chưa được hỏi. Loại tương tác này là bình thường, không có gì lạ khi làm việc với các nhóm phát triển nội bộ; nó xuất hiện ít nhất một lần một tháng. Một nhà phát triển lỗi nóng đã viết và kiểm tra mã của mình, sử dụng một bảng có cột trùng lặp, nó bay và bây giờ nó bị đình trệ vì tôi sẽ không đưa nó vào db.

    Không, tôi sẽ kiểm tra nó trong bối cảnh của toàn bộ hệ thống và:

    • một nửa thời gian, bảng đi vào mà không có cột Ngày kết thúc vì không có vấn đề gì lớn về việc truy vấn nửa giây hiện thực hiện trong một giây.

    • Nửa thời gian còn lại, hiệu suất [truy vấn con của bảng] không được chấp nhận, vì vậy tôi triển khai chỉ báo boolean (bit) để xác định IsCurrent . Điều đó tốt hơn nhiều so với một cột trùng lặp và cung cấp tốc độ quét 2 lần.

    • Không phải trong một triệu năm nữa, bạn sẽ giúp tôi sao chép một cột; thêm 62% vào kích thước bảng; làm chậm bảng trong ngữ cảnh nhiều người dùng đầy đủ tăng 62%; và có nguy cơ thất bại một cuộc Kiểm toán. Và tôi không phải là nhân viên, tôi không được thưởng.

    Bây giờ điều đó sẽ đáng để thử nghiệm:truy vấn với một cột trùng lặp so với truy vấn có IsCurrent chỉ báo, trong bối cảnh đầy đủ của việc sử dụng tài nguyên tổng thể.

  5. Smirkingman đã đưa ra một điểm tốt. Và tôi sẽ trình bày lại nó một cách rõ ràng, để nó không bị phân mảnh và sau đó một hoặc mảnh kia bị tấn công. Vui lòng không chia tay điều này:

    Cơ sở dữ liệu quan hệ,
    được chuẩn hóa bởi người điều chế quan hệ có kinh nghiệm, thành Dạng chuẩn thứ năm thực sự

    (không có Bất thường cập nhật; không có cột trùng lặp),
    với đầy đủ Tuân thủ quan hệ
    (IDEF1X, đặc biệt liên quan đến việc giảm thiểu Id Phím chính; và do đó không làm tê liệt sức mạnh của động cơ Quan hệ)
    sẽ dẫn đến nhiều bảng hơn, nhỏ hơn, cơ sở dữ liệu nhỏ hơn,
    với ít Chỉ số hơn,
    yêu cầu ít liên kết hơn

    (đúng vậy, nhiều bảng hơn nhưng ít liên kết hơn),
    và nó sẽ thực hiện bất kỳ điều gì vi phạm bất kỳ quy tắc nào trong số đó
    trên cùng một phần cứng và doanh nghiệp nền tảng db

    (không bao gồm phần mềm miễn phí, MS, Oracle; nhưng đừng để điều đó cản trở bạn),
    trong bối cảnh đầy đủ của việc sử dụng Production OLTP
    theo ít nhất một bậc lớn,
    và việc sử dụng
    cũng như thay đổi sẽ dễ dàng hơn nhiều

    (không bao giờ cần "tái cấu trúc").

    Tôi đã làm điều này ít nhất 80 lần. Hai đơn đặt hàng có độ lớn không phải là hiếm, nếu tôi tự làm, thay vì cung cấp khuôn khổ cho người khác làm.

Cả tôi, không phải những người tôi làm việc cùng hoặc những người trả tiền cho tôi, không quan tâm đến những gì một truy vấn sẽ thực hiện một cách riêng biệt.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách xem nhật ký giao dịch trong SQL Server 2008

  2. Hạn chế kết nối SQL Server đối với một địa chỉ IP cụ thể

  3. Sử dụng PIVOT trong SQL Server 2008

  4. nhận ID bản ghi SQL mới

  5. Nhà môi giới dịch vụ máy chủ Sql