Làm cách nào để xác định bảng nào đang khiến cơ sở dữ liệu phát triển theo thời gian?


8

Tôi có một cơ sở dữ liệu trong SQL Server 2008 đang phát triển mọi lúc và tôi muốn biết bảng nào đã gây ra sự tăng trưởng nhiều nhất trong 6 tháng qua.


Bạn có thể sử dụng kết hợp T-SQL và PowerShell - Tăng trưởng bảng theo dõi với PowerShell để theo dõi và xu hướng theo thời gian.
Kin Shah

Làm thế nào xa trở lại để bạn có bản sao lưu cho? Bạn có thể khôi phục những cái cũ hơn và nhìn vào các bảng, ghi lại thông tin và so sánh theo cách đó sau khi khôi phục lại các bảng.
Ali Razeghi

Những loại thông tin bạn có trong bảng của bạn? Nếu nó bao gồm thông tin loại kiểm toán, như last_updated_atdấu thời gian, bạn có thể đưa ra một số dự đoán có giáo dục tốt.
Đồng hồ-Muse

Bạn có thể kiểm tra câu trả lời trước cho một khởi đầu. Nhưng rất có thể danh sách của Aaron là con đường để đi, chọn một giải pháp và xây dựng nó. Ngoài ra, hãy kiểm tra những gì đang phát triển, đó là tệp dữ liệu hay nó có thể là tệp nhật ký?
Mary

Câu trả lời:


15

SQL Server không theo dõi thông tin này. Bạn sẽ cần một số loại giám sát (cho dù đó là một công cụ hoặc được trồng tại nhà) để giữ các ảnh chụp nhanh của không gian bảng theo thời gian, trong tương lai. Điều này có thể đơn giản hoặc phức tạp:

  • Xem báo cáo @Zane nổi bật trong câu trả lời của anh ấy và lưu tệp thường xuyên;
  • Chụp ảnh định kỳ của riêng bạn về lượt xem như sys.dm_db_partition_stats;
  • Nhìn vào các bản sao đã được khôi phục của các bản sao lưu cũ hơn, như được đề xuất bởi @Ali - tuy nhiên ai biết được bản sao lưu của bạn đi được bao xa và nếu không gian đĩa là một vấn đề, bạn có thể không cần phải khôi phục một loạt chúng để so sánh song song dù sao.
  • Sử dụng một công cụ bên ngoài như PowerShell để tự động hóa nó, như bài viết @Kin chỉ ra ;
  • Sử dụng một công cụ giám sát toàn diện để theo dõi không gian, phân mảnh, v.v. theo thời gian (Tuyên bố miễn trừ trách nhiệm: Tôi làm việc cho SQL Sentry).

Thiếu việc đã thực hiện một hoặc nhiều phương pháp này hoặc ai đó phát minh ra cỗ máy thời gian, thực sự không có cách nào tốt để tìm ra một cái bàn lớn như thế nào 6 tháng trước, hoặc hai tuần trước, hoặc 20 phút trước.


13

Nếu bạn chưa nắm bắt và lưu trữ các số liệu đó bằng cách nào đó thì không có cách nào để xem lịch sử. Tuy nhiên, bạn có thể dễ dàng thấy bảng nào đang sử dụng nhiều đĩa nhất nếu điều đó có ích.

Nhấp chuột phải


2

Tôi chạy cái này hàng ngày trên cơ sở dữ liệu khách hàng để theo dõi sự tăng trưởng của từng bảng theo thời gian.

DECLARE @names TABLE (
 tableName VARCHAR(128)
 )

INSERT INTO @names
SELECT [name] FROM customerdb.dbo.sysobjects WHERE xtype='U'

WHILE (SELECT COUNT(tableName) FROM @names) > 0
BEGIN

    DECLARE @thisTable VARCHAR(128)
    SET @thisTable = (SELECT TOP 1 tableName FROM @names)
    INSERT INTO mydb.dbo.mytable ([name], [rows], [reserved], [data], [index_size], [unused])
    EXEC sp_spaceused @objname=@thisTable

    DELETE FROM @names
    WHERE tableName = @thisTable

END

1

Tôi có một lịch trình tập lệnh SQL về một công việc để chạy mỗi tuần. Hãy thử viết một tập lệnh nhận tất cả thông tin từ sp_spaceuse, sys.schemas và sys.tables. và đặt nó trong một bảng với ngày được tạo. (và bạn có thể bắt đầu theo dõi trong tương lai)

Nhưng nếu bạn muốn tìm hiểu sự tăng trưởng của bảng trong những tháng trước và nếu bạn không thiết lập bất kỳ tập lệnh hoặc công việc nào, có lẽ bạn sẽ cần khôi phục lại bản sao lưu trong môi trường thử nghiệm và xem bảng cao nhất và so sánh mức tăng của nó qua thời gian.


5
Tại sao không chia sẻ kịch bản của bạn?
Erik Darling

-2

Làm thế nào tôi làm điều đó trong MySQL mà không cần các công cụ bổ sung:

Chạy một truy vấn như "SHOW TABLE STATUS" và lưu kết quả vào một bảng có trường dấu thời gian bổ sung.

Với dữ liệu này, bạn có lịch sử của từng bảng và có thể chọn các bảng của mình về độ dài dữ liệu, hàng hoặc độ lệch lớn nhất. tăng ca.

Vì dữ liệu trạng thái không nhiều byte, bạn có thể chạy nó với cronjob hàng ngày. Chạy hoàn hảo, dễ dàng và miễn phí với các lệnh trên tàu.

.

Thủ tục tương tự như liên kết mà Marian đã đăng trước đó. Lệnh MS T-SQL phải là một cái gì đó như "CHỌN * TỪ THÔNG TIN_SCHema.TABLES" - chỉ cần google. Tôi tìm thấy 2 giải pháp khả thi trong vài giây:

Liệt kê tất cả các bảng trong cơ sở dữ liệu và số lượng và kích thước hàng của chúng: http://www.sqlmatters.com/Articles/Listing%20all%20tables%20in%20a%20database%20and%20their%20row%20counts%20and%20sizes.aspx

SQL SERVER - Truy vấn để tìm số Hàng, Cột, ByteSize cho mỗi bảng: http://blog.sqlauthority.com/2007/01/10/sql-server-query-to-find-number-rows-columns-bytesize- cho-mỗi-bảng-trong-hiện-cơ sở dữ liệu-tìm-lớn nhất-bảng-trong-cơ sở dữ liệu /

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.