- vừa được xem lúc

Cách tối ưu bảng dữ liệu hơn tỉ row không có partion và index trong database mysql ?

0 0 9

Người đăng: Du Code Lởm

Theo Viblo Asia

Lời nói đầu

  • Chắc hẳn ai cũng từng làm dự án gặp bài toán khó , bài toán khó của tôi hiện tại là làm sao xoá được dữ liệu trong 1 bảng dữ liệu bao gồm 1.5 tỉ row và không có bất kỳ index hay transaction nào hết ?

Nguyên nhân và cách khắc phục

Nguyên nhân

  • Do từ đầu khi tạo bảng không có nghĩ các trường hợp cũng như đánh giá nghĩ đơn thuần chỉ tạo ra 1 bảng lưu lịch sử giao dịch nên team vận hành cùng với team IT soft ware không có đánh giá sâu chi tiết dẫn đến dữ liệu nạp này càng nhiều các bạn tưởng tượng như lúc xây 1 toà nhà mà không thiết kế chắc cái móng nhà ấy như vậy là dữ liệu cứ insert into , insert theo bath ... dẫn đến cao tải cùng với disk của server cao lên .và có thực hiện bất kỳ câu lệnh nào cũng rất rất chậm cao tải ...

Cách khắc phục tạm thời.

  • Sau khi một ngày một bạn bên bộ phận vận hành có kiểm tra hệ thống và có xác định được rằng table này có dữ liệu cực lớn và cần tối ưu làm rõ nguyên nhân ở đâu .
  • Sau khi nhận được thông tin như vậy yêu cầu chặt chẽ phía bộ phận IT + bộ phận vận hành bảo trì hệ thống (DBA) vào kiểm tra .
  1. Bộ phận bào trì vận hành chỉ ra vấn đề rằng bảng này có lượng request thay đổi hằng ngày cực cao và cần phải được stop lại không lưu bảng này nữa tìm cách khắc phục
  2. Họp gấp bộ phận phát triển (Dev + DBA) DBA đưa ra phương án rằng tạo 1 bảng mới backup tạm thời rằng ví dụ (backup_1) tương tự các trường đầy đủ như bảng đang sử dụng và vận dụng thuật toán partion range theo tháng và index đầy đủ .
  3. Bộ phận phát triển chỉnh sửa code gấn call insert vào bảng do bộ phận DBA tạo ra . (Vì bảng kia đã quá tải không thể insert thêm và tạm dừng việc select + insert + update với bảng có 1.5 tỉ rows) => Như vậy tạm thời vấn đề đã được giải quyết ở phía chuyên gia đã thành công giải quyết đc vấn đề trước mắt rằng là tạo cấu trúc chuẩn không thực hiện kết nối đến bảng dữ liệu có 1,5 tỉ rows

Cách khắc phục lâu dài

  • Như vậy ở bước trên chúng tôi đã giải quyết đc vấn đề cao tải và tối ưu mặt dữ liệu không bị mất (vì các công ty công nghệ dữ liệu là kim cương liên quan sống còn của doanh nghiệp như momo vừa rồi bị lỗi cái là cũng toang)
  • Tiếp đến bây giờ làm sao giải quyết được vấn đề băm dữ liệu 1.5 tỉ row kia ra và sao cho hợp lý vì nếu giờ cứ select * from where create_time > 30 để insert vào bảng mới tạo cũng không hợp lý
  • Qua thảo luận lý do nguyên nhân vì chưa đánh index và partion (như vậy chỉ có cách là limit lại dữ liệu và dựa vào trường id ) và để đảm bảo được dữ liệu toàn vẹn thì lại phải tạo ra bảng mới nữa để move dữ liẹu từ bảng cũ 1.5 tỉ rows sang Các bước chúng tôi tiến hành như sau .
  1. Tạo ra bảng backup1 cũng đầy đủ partion + index .
  2. Sau đó chúng tôi sẽ insert theo lô (ví dụ từ 0 -> 10000) và tiếp theo là 10000-> 200000 như vậy chúng tôi sẽ giới hạn được câu lệnh select và scan toàn bộ data
  3. Sau đó chúng tôi viết tool foreach bước 2 này insert bath vào bảng backup1
  4. Bước 3 là chờ đợi nó chạy xong thôi .

Kinh nghiệm và bài học rút ra .

  • Chúng ta phải nghĩ hết các trường hơpj cần giải quyết vấn đề tốt nhất
  • Sau đó phải hiểu kiến trúc hệ thống + thuật toán của database mình đã từng gặp trường hợp cứ chậm và chậm mãi thôi ở đây sinh viên mới ra trường sẽ không có kinh nghiệm -THường cần hiểu thật sâu rằng từng câu lệnh và chiến lược thực thi của database nữa . vòng đời dữ liệu những case chúng ta có thể gặp
  • ở bài viết này mình chia sẻ kiến thức ở phần quy trình nhiều hơn các bạn dựa vào quy trình này gặp trường hợp các bạn giải quyết tốt nhất
  • CHÚC CÁC BẠN SỨC KHOẺ THÀNH CÔNG

Bình luận

Bài viết tương tự

- vừa được xem lúc

Index trong Mysql và cách sử dụng

Một số database là một cấu trúc dữ liệu để cải thiện tốc độ của các hoạt động trong một bảng. Trong khi tạo index, nó cần được xem xét rằng các cột đó sẽ được sử dụng để thực hiện các truy vấn SQL và tạo ra một hoặc nhiều chỉ số trên các cột đó là gì.

0 0 32

- vừa được xem lúc

Tạo ER Diagram của một Database bằng MySQL Workbench

Trong số chúng ta ai cũng đều đã từng trải qua một thời sinh viên tràn ngập đồ án này, đồ án kia đúng không? Mình cũng đã từng có một thời như thế Mà chuyên ngành chúng ta là công nghệ thông tin thì làm việc với Database trong mỗi đồ án là điều không thể thiếu rồi. Chuyện sẽ chẳng có gì to tát cho đ

0 0 49

- vừa được xem lúc

Window Functions trong MySQL, Nâng cao và cực kì hữu dụng (Phần II).

Chào mọi người, lại là mình đây, ở phần trước mình đã giới thiệu với mọi người về Window Functions Phần I. Nếu chưa rõ nó là gì thì mọi người nên đọc lại trước nha, để nắm được định nghĩa và các key words, tránh mắt chữ O mồm chứ A vì phần này mình chủ yếu sẽ thực hành với các Window Functions.

0 0 90

- vừa được xem lúc

Window Functions trong MySQL, Nâng cao và cực kì hữu dụng (Phần I).

Chào mọi người, mình mới tìm hiểu đc topic Window Functions cá nhân mình cảm thấy khá là hay và mình đánh giá nó là phần nâng cao. Vì ít người biết nên Window Functions thấy rất ít khi sử dụng, thay vì đó là những câu subquery dài dằng dặc như tin nhắn nhắn cho crush, và người khác đọc hiểu được câu

0 0 897

- vừa được xem lúc

Mysql index strategy

Trong Mysql, index hỗ trợ việc tìm kiếm các rows theo từng giá trị của các columns trong bảng trở nên nhanh chóng. Việc tìm kiếm sẽ phải scan toàn bộ table nếu các column trong câu query không được đánh index một cách thích hợp. . .

0 0 50

- vừa được xem lúc

CRUD Nodejs với mysql

Mở Đầu. Xin chào các bạn tiếp tục với series Nodejs cơ bản, bài hôm nay mình sẽ tiếp tục làm thêm các chức năng xem chi tiết và sửa và xóa sản phẩm.

0 0 64