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.
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.
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.
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.
Câu trả lời:
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:
sys.dm_db_partition_stats;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.
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
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.
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 /