Cơ sở dữ liệu khác trên mỗi Sql Server 2005 Instance


7

Công ty chúng tôi hiện lưu trữ khoảng 400 cơ sở dữ liệu trên mỗi phiên bản SQL Server 2005. 500-600 cơ sở dữ liệu và chúng tôi thấy hiệu suất bắt đầu xấu đi. Kích thước cơ sở dữ liệu dao động từ 50mb đến 40-60gb, với mức trung bình có thể là vài GB.

Một số số liệu tốt để thu thập là gì và làm thế nào chúng ta có thể xác định những điểm yếu này?

Đây có phải là giới hạn hiệu suất của SQL Server khi có quá nhiều cơ sở dữ liệu không? Có phải tất cả các kế hoạch thủ tục lưu trữ cho hàng trăm thủ tục được lưu trữ cho hàng trăm cơ sở dữ liệu? Có phải là truy vấn không hiệu quả? Hay một sự kết hợp?

Điều gì có khả năng giúp chúng tôi tăng số lượng cơ sở dữ liệu trên mỗi máy chủ nhiều nhất? Tất cả các lược đồ là giống hệt nhau và cơ sở dữ liệu tách biệt dữ liệu của mỗi khách hàng. Có thể tái cấu trúc mọi thứ để chúng tôi có thể kết hợp nhiều khách hàng thành một db và lọc theo khách hàng hoặc tối ưu hóa các truy vấn của chúng tôi đến mức tối đa? Hoặc có thể nó chỉ là một giới hạn SQL Server?

Câu trả lời:


9

Sẽ là một thách thức khi áp dụng chính sách đồng phục đối với một bất động sản đa dạng như vậy. Cổng gọi đầu tiên của tôi sẽ là để hiểu những người tiêu dùng lớn nhất về tài nguyên chính (CPU, bộ nhớ, IO) trên từng trường hợp, nhằm tách biệt các cơ sở dữ liệu có vấn đề với các cơ sở dữ liệu khác. Các DMV kiểm tra sức khỏe của Glenn Berrys sẽ là điểm khởi đầu tốt.

Ai đang sử dụng hầu hết bộ nhớ (vùng đệm) trên mỗi trường hợp?

SELECT DB_NAME(database_id) AS [Database Name],
COUNT(*) * 8/1024.0 AS [Cached Size (MB)]
FROM sys.dm_os_buffer_descriptors
WHERE database_id > 4 -- system databases
AND database_id <> 32767 -- ResourceDB
GROUP BY DB_NAME(database_id)
ORDER BY [Cached Size (MB)] DESC OPTION (RECOMPILE);

Bao lâu là các trang ở trong vùng đệm?

SELECT cntr_value AS [Page Life Expectancy]
FROM sys.dm_os_performance_counters
WHERE [object_name] = N'SQLServer:Buffer Manager'
AND counter_name = N'Page life expectancy' OPTION (RECOMPILE);

Ai đang tạo ra nhiều IO nhất?

SELECT DB_NAME(DB_ID()) AS [Database Name],[file_id], num_of_reads, num_of_writes, 
io_stall_read_ms, io_stall_write_ms,
CAST(100. * io_stall_read_ms/(io_stall_read_ms + io_stall_write_ms) AS DECIMAL(10,1)) AS [IO Stall Reads Pct],
CAST(100. * io_stall_write_ms/(io_stall_write_ms + io_stall_read_ms) AS DECIMAL(10,1)) AS [IO Stall Writes Pct],
(num_of_reads + num_of_writes) AS [Writes + Reads], num_of_bytes_read, num_of_bytes_written,
CAST(100. * num_of_reads/(num_of_reads + num_of_writes) AS DECIMAL(10,1)) AS [# Reads Pct],
CAST(100. * num_of_writes/(num_of_reads + num_of_writes) AS DECIMAL(10,1)) AS [# Write Pct],
CAST(100. * num_of_bytes_read/(num_of_bytes_read + num_of_bytes_written) AS DECIMAL(10,1)) AS [Read Bytes Pct],
CAST(100. * num_of_bytes_written/(num_of_bytes_read + num_of_bytes_written) AS DECIMAL(10,1)) AS [Written Bytes Pct]
FROM sys.dm_io_virtual_file_stats(DB_ID(), NULL) OPTION (RECOMPILE);

Cơ sở dữ liệu nào đang tiêu thụ nhiều CPU nhất và quy trình cụ thể nào?

SELECT 
    DB_NAME(qt.dbid) AS DatabaseName
  , SUM(qs.total_worker_time) AS [TotalWorkerTime]
FROM
    sys.dm_exec_query_stats AS qs
CROSS APPLY 
    sys.dm_exec_sql_text(qs.[sql_handle]) AS qt
WHERE
    DB_NAME(qt.dbid) IS NOT NULL
GROUP BY
    qt.dbid
ORDER BY
    SUM(qs.total_worker_time) DESC
OPTION
    (RECOMPILE) ;

SELECT TOP (1000)
    DB_NAME(qt.dbid) AS DatabaseName
  , qt.[text] AS [SP Name]
  , qs.total_worker_time AS [TotalWorkerTime]
FROM
    sys.dm_exec_query_stats AS qs
CROSS APPLY 
    sys.dm_exec_sql_text(qs.[sql_handle]) AS qt
WHERE
    DB_NAME(qt.dbid) IS NOT NULL
ORDER BY
    qs.total_worker_time DESC
OPTION
    (RECOMPILE) ;

5

Không làm gì khác, thêm RAM trong máy chủ. RAM được sử dụng để lưu trữ dữ liệu và kế hoạch. Vì vậy, thêm nhiều hơn để giảm áp lực đó. Thêm quá nhiều RAM là có thể nhưng với số tiền bạn đã có, tôi nghi ngờ điều đó.

Sau đó, chạy một số truy vấn dmv để tìm những thứ cần điều chỉnh:

Cũng xem lại đĩa của bạn:

  • khối lượng riêng cho tempdb
  • di chuyển cơ sở dữ liệu lớn nhất của bạn vào các khối riêng biệt

Cuối cùng, bạn là ảo hay vật lý? Bạn nên vật lý và dành riêng cho các máy chủ cơ sở dữ liệu được tải.


4

Đây không phải là giới hạn trong máy chủ SQL, bạn có thể dễ dàng vượt qua 600 cơ sở dữ liệu được cung cấp đủ CPU và đĩa. Có nhiều khả năng một số thiếu hiệu quả đang gộp và bão hòa một số tài nguyên.

Làm thế nào là hiệu suất xấu đi? Làm chậm màn hình? Có thể là một cổ chai tại máy chủ web, giả sử đó là một mặt trước web. Tạo báo cáo chậm hơn? Truy vấn không hiệu quả? hoặc có thể chỉ là quá nhiều dữ liệu đi xuống dây?

Là khối lượng công việc trải đều trên tất cả các cơ sở dữ liệu? Hay những cái lớn hơn tạo ra gấp 10 lần giao dịch? Tùy thuộc vào số lượng máy chủ, bạn có thể muốn tách các cơ sở dữ liệu lớn hơn khỏi các cơ sở dữ liệu nhỏ.

Tôi sẽ bắt đầu với một số perfmon, kiểm tra độ dài hàng đợi đĩa,% không hoạt động của đĩa và% CPU; và đảm bảo hàng đợi đĩa của bạn không nhất quán cao.

Bạn đang duy trì từng cơ sở dữ liệu, xây dựng lại các chỉ mục, sao lưu nhật ký giao dịch thường xuyên, cập nhật thống kê? Nếu bạn đang sử dụng tự động cập nhật trên các số liệu thống kê, điều đó có thể gây ra sự chậm lại trong các khoảng thời gian ngẫu nhiên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.