Bạn đang xem : Truy vấn sql bảng trống

Công ty của tôi sử dụng một ứng dụng có vấn đề về hiệu suất khá lớn. Có một số vấn đề với bản thân cơ sở dữ liệu mà tôi đang trong quá trình làm việc, nhưng nhiều vấn đề hoàn toàn liên quan đến ứng dụng.

Trong cuộc điều tra của mình, tôi nhận thấy rằng có hàng triệu truy vấn truy vấn cơ sở dữ liệu SQL Server truy vấn các bảng trống. Chúng tôi có khoảng 300 bàn trống và một số bàn trong số đó được truy vấn lên đến 100-200 lần mỗi phút. Các bảng này không liên quan gì đến lĩnh vực kinh doanh của chúng tôi và về cơ bản là các phần của ứng dụng gốc mà nhà cung cấp đã không xóa khi họ được công ty của tôi ký hợp đồng để sản xuất giải pháp phần mềm cho chúng tôi.

Ngoài thực tế là chúng tôi nghi ngờ nhật ký lỗi ứng dụng của chúng tôi chứa đầy các lỗi liên quan đến vấn đề này, nhà cung cấp đảm bảo với chúng tôi rằng không có tác động về hiệu suất hoặc độ ổn định đối với ứng dụng hoặc máy chủ cơ sở dữ liệu. Nhật ký lỗi bị ngập đến mức chúng tôi không thể nhìn thấy lỗi có giá trị hơn 2 phút để thực hiện chẩn đoán.

Chi phí thực tế của những truy vấn này rõ ràng là sẽ thấp về chu kỳ CPU, v.v. Nhưng có ai có thể đề xuất tác động của nó đối với SQL Server và ứng dụng không? Tôi nghi ngờ rằng cơ chế thực tế của việc gửi yêu cầu, xác nhận, xử lý, gửi lại và xác nhận việc ứng dụng đã nhận sẽ có tác động đến hiệu suất.

Chúng tôi sử dụng SQL Server 2008 R2, Oracle Weblogic 11g cho ứng dụng.

@ Frisbee- Một câu chuyện ngắn, tôi đã tạo một bảng có chứa văn bản truy vấn, truy vấn các bảng trống trong cơ sở dữ liệu của ứng dụng, sau đó truy vấn nó cho tất cả các tên bảng mà tôi biết là trống và có một danh sách rất dài. Thành tích cao nhất là 2,7 triệu lượt thực thi trong 30 ngày thời gian hoạt động, lưu ý rằng ứng dụng thường được sử dụng từ 8 giờ sáng đến 6 giờ tối nên những con số này tập trung nhiều hơn vào giờ hoạt động. Nhiều bảng, nhiều truy vấn, có thể là một số tương tác thông qua các phép nối, một số thì không. Lượt truy cập hàng đầu (2,7 triệu vào thời điểm đó) là một lựa chọn đơn giản từ một bảng trống duy nhất với mệnh đề where, không có phép nối. Tôi mong đợi các truy vấn lớn hơn với các phép nối đến các bảng trống có thể bao gồm các cập nhật cho các bảng được liên kết, nhưng tôi sẽ kiểm tra điều đó và cập nhật câu hỏi này càng sớm càng tốt.

Cập nhật: Có 1000 truy vấn với số lượng thực thi trong khoảng 1043 – 4622614 (hơn 2,5 tháng). Tôi sẽ phải tìm hiểu thêm để tìm hiểu xem kế hoạch được lưu trong bộ nhớ cache bắt nguồn từ khi nào. Điều này chỉ để cung cấp cho bạn ý tưởng về mức độ của các truy vấn. Hầu hết đều phức tạp hợp lý với hơn 20 liên kết.

Xem Thêm  Dấu thời gian đến ngày trong SQL - ngày có dấu thời gian bằng sql

@ srutzky- yes Tôi tin rằng có một cột ngày liên quan đến thời điểm kế hoạch được biên soạn để được quan tâm, vì vậy tôi sẽ kiểm tra. Tôi tự hỏi liệu giới hạn luồng có phải là một yếu tố khi SQL Server nằm trên một cụm VMware không? Rất may sẽ sớm trở thành một chiếc Dell PE 730xD chuyên dụng.

@Frisbee – Xin lỗi vì phản hồi muộn. Như bạn đã đề xuất, tôi đã chạy một lựa chọn * từ bảng trống 10.000 lần trên 24 chủ đề bằng cách sử dụng SQLQueryS Stress (vì vậy thực tế là 240.000 lần lặp) và đạt 10.000 Yêu cầu hàng loạt / giây ngay lập tức. Sau đó, tôi giảm xuống 1000 lần trên 24 chủ đề và chỉ đạt dưới 4.000 Yêu cầu hàng loạt / giây. Tôi cũng đã thử 10.000 lần lặp chỉ trên 12 luồng (tổng số 120000 lần lặp) và điều này tạo ra 6.505 Batch / giây duy trì. Hiệu ứng trên CPU thực sự đáng chú ý, khoảng 5-10% tổng mức sử dụng CPU trong mỗi lần chạy thử nghiệm. Thời gian chờ của mạng không đáng kể (như 3ms với máy khách trên máy trạm của tôi) nhưng tác động của CPU chắc chắn là có, điều này khá thuyết phục theo như tôi nghĩ. Nó dường như giảm xuống mức sử dụng CPU và một chút IO tệp cơ sở dữ liệu không cần thiết. Tổng số lần thực thi / giây hoạt động chỉ dưới 3000, nhiều hơn so với sản xuất, tuy nhiên tôi chỉ đang thử nghiệm một trong hàng chục truy vấn như thế này. Do đó, ảnh hưởng thực của hàng trăm truy vấn đến các bảng trống với tốc độ từ 300-4000 lần mỗi phút sẽ không đáng kể khi nói đến thời gian của CPU. Tất cả các thử nghiệm được thực hiện dựa trên PE 730xD không hoạt động với mảng đèn flash kép và RAM 256GB, 12 lõi hiện đại.
Đây là kết quả từ SQLSentry

@ srutzky- tư duy tốt. SQLQuerySedly dường như sử dụng kết nối tổng hợp theo mặc định nhưng dù sao thì tôi cũng đã xem xét và thấy rằng có, hộp để tổng hợp kết nối được chọn. Cập nhật để theo dõi

@ srutzky- Tính năng tổng hợp kết nối dường như không được bật trên ứng dụng – hoặc nếu có, nó không hoạt động. Tôi đã theo dõi hồ sơ và nhận thấy rằng các kết nối có EventSubClass “1 – Không chia sẻ” cho các sự kiện Đăng nhập kiểm tra.

RE: Tổng hợp kết nối- Đã kiểm tra weblogics và thấy tính năng tổng hợp kết nối được bật. Lần theo dấu vết khác so với trực tiếp và tìm thấy các dấu hiệu của việc gộp chung không xảy ra chính xác / ở tất cả:
nhập mô tả hình ảnh vào đây

Và đây là giao diện khi tôi chạy một truy vấn đơn lẻ không có phép nối nào với một bảng đã được phổ biến; các ngoại lệ đọc “Đã xảy ra lỗi liên quan đến mạng hoặc đối với phiên bản cụ thể khi thiết lập kết nối với SQL Server. Máy chủ không được tìm thấy hoặc không thể truy cập được. Xác minh rằng tên phiên bản là chính xác và SQL Server được định cấu hình để cho phép kết nối từ xa. (nhà cung cấp: Nhà cung cấp đường ống được đặt tên, lỗi: 40 – Không thể mở kết nối với SQL Server) “Lưu ý bộ đếm yêu cầu hàng loạt. Ping máy chủ trong thời gian các ngoại lệ được tạo dẫn đến phản hồi ping thành công.

Xem Thêm  CSS Padding - padding làm gì trong css

nhập mô tả hình ảnh vào đây

Cập nhật- hai lần chạy thử nghiệm liên tiếp, cùng một khối lượng công việc (chọn * fromEmptyTable), đã bật / không bật tính năng gộp. Sử dụng CPU nhiều hơn một chút và rất nhiều lỗi và không bao giờ vượt quá 500 yêu cầu hàng loạt / giây. Các thử nghiệm cho thấy 10.000 Lô / giây và không có lỗi nào khi BẬT tổng hợp và khoảng 400 lô / giây sau đó rất nhiều lỗi do tính năng gộp bị tắt. Tôi tự hỏi liệu những lỗi này có liên quan đến việc thiếu kết nối không?

nhập mô tả hình ảnh vào đây

@ srutzky- Chọn Đếm (*) từ sys.dm_exec_connections;

  • Đã bật tính năng tổng hợp: 37 liên tục, ngay cả sau khi thử nghiệm tải dừng

  • Tính năng tổng hợp bị vô hiệu hóa: 11-37 tùy thuộc vào việc có ngoại lệ hay không
    xảy ra trên SQLQuerySosystem, tức là: khi những điểm đáy đó xuất hiện trên
    Biểu đồ lô / giây, các ngoại lệ xảy ra trên SQLQueryS Stress và
    số lượng kết nối giảm xuống 11, sau đó dần dần sao lưu lên 37 khi
    các lô bắt đầu đạt đỉnh và không xảy ra các trường hợp ngoại lệ. Rất,
    rất thú vị.

Kết nối tối đa trên cả hai phiên bản thử nghiệm / trực tiếp được đặt ở giá trị mặc định là 0.

Đã kiểm tra nhật ký ứng dụng và không thể tìm thấy sự cố kết nối, tuy nhiên, chỉ có vài phút ghi nhật ký khả dụng do số lượng và kích thước lỗi lớn, tức là: rất nhiều lỗi theo dõi ngăn xếp. Một đồng nghiệp về bộ phận hỗ trợ ứng dụng khuyên rằng một số lượng đáng kể lỗi HTTP xảy ra liên quan đến kết nối. Dựa trên điều này, có vẻ như vì lý do nào đó mà ứng dụng không gộp các kết nối một cách chính xác và kết quả là máy chủ liên tục hết kết nối. Tôi sẽ xem xét nhật ký ứng dụng nhiều hơn. Tôi tự hỏi có cách nào để chứng minh điều này đang xảy ra trong quá trình sản xuất từ ​​phía SQL Server không?

@ srutzky- Cảm ơn bạn. Ngày mai tôi sẽ kiểm tra cấu hình weblogic và cập nhật. Tôi đã nghĩ đến chỉ 37 kết nối – nếu SQLQueryS Stress đang thực hiện 12 luồng với 10.000 lần lặp = 120.000 câu lệnh select không được gộp chung, điều đó có nghĩa là mỗi lựa chọn tạo ra một kết nối riêng biệt với cá thể sql?

@ srutzky- Weblogics được định cấu hình thành các kết nối tổng hợp, vì vậy nó sẽ hoạt động tốt. Tổng hợp kết nối được định cấu hình như thế này, trên mỗi weblogics trong số 4 weblog cân bằng tải:

  • Công suất ban đầu: 10
  • Công suất Tối đa: 50
  • Dung lượng Tối thiểu: 5

Khi tôi tăng số lượng chuỗi thực hiện truy vấn chọn từ bảng trống, số lượng kết nối đạt đỉnh khoảng 47. Khi tính năng tổng hợp kết nối bị tắt, tôi luôn thấy yêu cầu hàng loạt tối đa thấp hơn / giây (từ 10.000 xuống khoảng 400). Điều gì sẽ xảy ra mọi lúc là các ‘ngoại lệ’ trên SQLQueryS Stress xảy ra ngay sau khi lô / giây xuống đáy. Nó liên quan đến kết nối nhưng tôi không thể hiểu chính xác tại sao điều này lại xảy ra. Khi không có thử nghiệm nào đang chạy, #connections giảm xuống khoảng 12.

Xem Thêm  redis可视化工具和客户端 - redis rails

Khi tính năng tổng hợp kết nối bị tắt, tôi không hiểu tại sao lại xảy ra các ngoại lệ, nhưng có thể đó là một câu hỏi / câu hỏi hoàn toàn khác về stackExchange dành cho Adam Machanic?

@srutzky Tôi tự hỏi tại sao các ngoại lệ xảy ra mà không bật tính năng gộp chung, mặc dù Máy chủ SQL không hết kết nối?


Xem thêm những thông tin liên quan đến chủ đề truy vấn sql bảng trống

NGÔN NGỮ TRUY VẤN SQL TRUY VẤN DỮ LIỆU TRÊN NHIỀU BẢNG P2

alt

  • Tác giả: Marry Vlog
  • Ngày đăng: 2022-04-07
  • Đánh giá: 4 ⭐ ( 7680 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: SQL là một ngôn ngữ để tương tác với cơ sở dữ liệu; Nó bao gồm việc tạo ra cơ sở dữ liệu, xóa, lấy các hàng, sửa đổi các hàng, vv SQL là một ngôn ngữ chuẩn ANSI (American National Standards Institute), nhưng có nhiều phiên bản khác nhau của ngôn ngữ SQL.
    SQL laptrinh IT

Truy vấn dữ liệu trong SQL

  • Tác giả: hocspringmvc.net
  • Đánh giá: 3 ⭐ ( 7791 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: ruy vấn dữ liệu trong sql là thao tác trích xuất thông tin được lưu trữ trong các table. Thông tin được truy xuất thông

Bài 10: Truy vấn dữ liệu trong SQL Server (Phần 1)

  • Tác giả: vncoder.vn
  • Đánh giá: 3 ⭐ ( 9979 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Truy vấn dữ liệu trong SQL Server là thao tác trích xuất thông tin được lưu trữ trong các Table. Thông tin được truy xuất thông qua các cột và thông tin cần trích xuất có thể thuộc một hoặc nhiều bảng.

Truy Vấn Dữ Liệu Từ Nhiều Bảng Trong Sql, Truy Vấn Sql Nâng Cao (Phần 1)

  • Tác giả: huynhhuunghia.edu.vn
  • Đánh giá: 4 ⭐ ( 2634 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Access cho Microsoft 365 Access 2021 Access 2019 Access 2016 Access 2013 Access 2010 Access 2007 Xem thêm,

Tuyển tập những câu hỏi phỏng vấn SQL thường gặp nhất

  • Tác giả: www.topcv.vn
  • Đánh giá: 3 ⭐ ( 4239 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Nắm rõ những câu hỏi phỏng vấn SQL sẽ giúp bạn chủ động hơn, cơ hội trúng tuyển vì vậy mà tăng cao. TopCV sẽ tổng hợp một số câu hỏi phỏng vấn SQL thường gặp

Học SQL với các câu hỏi phỏng vấn SQL cơ bản đến nâng cao

  • Tác giả: vietlike.vn
  • Đánh giá: 5 ⭐ ( 7960 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: SQL dường như là một trong những ngôn ngữ lập trình top đầu (phổ biến rộng rãi) hiện nay, mặc dù về mặt kỹ thuật, đây không phải là một ngôn ngữ lập trình!

Truy Vấn Dữ Liệu Trong Sql (Bài 5)

  • Tác giả: jdomain.vn
  • Đánh giá: 5 ⭐ ( 6681 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Truy vấn dữ liệu trong sql là thao tác trích xuất thông tin được lưu trữ trong các table, Thông tin được truy xuất thông qua các cột và thông tin cần trích xuất có thể thuộc một hoặc nhiều bảng

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

By ads_php