Mysql lưu trữ dữ liệu từ bảng này sang bảng khác
Trong các hoạt động hàng ngày của DBA, chúng tôi đang thực hiện thao tác Lưu trữ trên các máy chủ cơ sở dữ liệu xuyên quốc gia của mình để cải thiện các truy vấn của bạn và kiểm soát Dung lượng ổ đĩa. Lưu trữ là hoạt động tốn kém nhất vì nó liên quan đến một số lượng lớn Đọc và Viết sẽ được thực hiện. Vì vậy, bắt buộc phải chạy các truy vấn lưu trữ theo khối. Bản lưu trữ phụ thuộc vào việc sử dụng của doanh nghiệp. Nhiều người trong chúng ta cần một bản sao dữ liệu trên cơ sở dữ liệu lưu trữ để tham khảo sau này. Để thực hiện lưu trữ, chúng ta chỉ cần chạy truy vấn xóa với giới hạn. Nhưng chúng ta cần chạy đi chạy lại truy vấn cho đến khi số lượng hàng phù hợp bằng 0. Chúng ta có thể tạo một thủ tục để thực hiện điều này trong vòng lặp while. Tôi đã tạo một thủ tục như vậy để lưu trữ nhiều bảng. Show Nguồn hình ảnh. Brent Ozar không giới hạn Tại sao Lưu trữ là một hoạt động tốn kém?Nói chung, cách chúng tôi sắp xếp dữ liệu là xóa khỏi tên_bảng trong đó tên_cột <= some_value; . Sẽ có một IO nặng xảy ra trong Đĩa. Và nó sẽ khóa các hàng và một số khóa khác sẽ được giữ cho đến khi quá trình Lưu trữ hoàn tất. Sao chép có thể chậm trễ vì điều này. Khi Lưu trữ sẽ làm rối tung quá trình sản xuất?
Làm thế nào để thực hiện các kho lưu trữ đúng cách?
Cách tiếp cận của tôi với điều này. #Lấy cảm hứng từ Blog của Rick James, tôi đã chuẩn bị một quy trình được lưu trữ duy nhất để thực hiện lưu trữ trên nhiều bảng. Chúng ta chỉ cần chuyển tên bảng, cột ngày và sau đó là ngày để lưu trữ. Tôi đã thử nghiệm với cột ngày giờ và khóa chính. Lưu trữ một bảng duy nhất. #Quy trình dưới đây sẽ thực hiện xóa kiểm tra trên bảng và xóa các bản ghi cũ hơn 10 ngày.
Lưu trữ nhiều bảng. #Quy trình này sẽ giúp bạn lưu trữ nhiều bảng, bạn chỉ cần chuyển tên bảng, tên cột và ngày cho bản lưu trữ. Tôi thích sử dụng cái này
Kết xuất trước khi lưu trữ với mệnh đề where. #Tập lệnh này là tập lệnh yêu thích của tôi nhưng điều này phụ thuộc vào quy trình được lưu trữ ở trên. Tập lệnh shell này sẽ kết xuất bảng với mệnh đề where của ngày mà chúng tôi muốn lưu trữ. Bạn có thể tùy chỉnh điều này theo yêu cầu của bạn
Lưu trữ ví dụ. #Ví dụ này, tôi sẽ lưu trữ một bảng có tên là kiểm tra. Cột started_at chứa giá trị dấu thời gian. Tôi muốn xóa dữ liệu cũ hơn 15 ngày trong bảng. Bảng này nằm trong cơ sở dữ liệu tên là sqladmin |