Mysql 5.7 tải dữ liệu vào

Tải bất kỳ tệp lớn nào vào máy chủ MySQL bằng LOAD DATA INFILE là một quá trình tốn thời gian, bởi vì nó là một luồng đơn và nó cũng là một giao dịch đơn lẻ. Nhưng với phần cứng hiện đại, tài nguyên hệ thống không phải là nút thắt cổ chai. Tại Mydbops, chúng tôi tập trung vào việc cải thiện hiệu quả của quy trình vì chúng tôi coi trọng hiệu suất hơn. MySQL đã giới thiệu các hoạt động tải dữ liệu song song trong bản phát hành nhỏ mới nhất MySQL 8. 0. 17. Tôi tò mò muốn thử nghiệm tính năng này và muốn biết làm thế nào nó có thể cải thiện việc tải dữ liệu so với phương thức luồng đơn hiện có. Thông qua blog này, tôi sẽ so sánh cả hai phương pháp

Hãy nhớ rằng bạn chỉ có thể sử dụng tiện ích tải dữ liệu song song thông qua MySQL Shell

Luồng công việc nội bộ

Phần này mô tả quy trình làm việc của tải dữ liệu song song trong MySQL 8. 0. 17

  • Tiện ích importTable sẽ phân tích tệp dữ liệu đầu vào
  • Tiện ích importTable sẽ chia tệp lớn thành nhiều phần
  • Tiện ích importTable sẽ cập nhật các khối đến máy chủ MySQL đích với các luồng song song

Môi trường phòng thí nghiệm

Dưới đây là cấu hình máy chủ, mà tôi đã sử dụng để kiểm tra hoạt động tải dữ liệu

  • CPU 4 nhân
  • RAM 8GB
  • Đĩa SSD
  • Centos 7

Tôi cần tải một tệp CSV, kích thước của tệp khoảng 8 GB

sakthisrii:mysql-files sakthivel$ ls -lrth
-rw-r--r-- 1 root _mysql 8.06G Sep 12 18:16 load_data.csv

Hãy bắt đầu thử nghiệm với phương thức hiện có ( LOAD DATA INFILE luồng đơn)

Đang tải qua dữ liệu tải infi le.

MySQL localhost:33060+ ssl osm SQL > load data infile '/usr/local/mysql/mysql-files/load_data.csv' into table single.single_load fields terminated by ',' optionally enclosed by '"' lines terminated by '\n' (user_id,visible,name,size,latitude,longitude,timestamp,public,description,inserted);

Query OK, 14244516 rows affected, 0 warnings (39 min 35.5036 sec)
Records: 14244516 Deleted: 0 Skipped: 0 Warnings: 0

Chà, mất 39 phút 36 giây. Không, tôi sẽ tải cùng một dữ liệu trên một bảng khác, với Muti mới được tạo luồng trong tiện ích trình bao MySQL

Với đa luồng trong MySQL Shell

MySQL localhost osm JS > util.importTable("/usr/local/mysql/mysql-files/load_data.csv", {schema: "parallel", table: "parallel_load", columns: ["user_id","visible","name","size","latitude","longitude","timestamp","public","description","inserted"], dialect: "csv-unix", skipRows: 0, showProgress: true, fieldsOptionallyEnclosed: true, fieldsTerminatedBy: ",", linesTerminatedBy: "\n",fieldsEnclosedBy: '"',threads: 8, bytesPerChunk: "1G", maxRate: "2G"})

Importing from file '/usr/local/mysql/mysql-files/load_data.csv' to table `parallel`.`parallel_load` in MySQL Server at /tmp%2Fmysql.sock using 8 threads
[Worker01] parallel.parallel_load: Records: 1780564 Deleted: 0 Skipped: 0 Warnings: 0
 [Worker02] parallel.parallel_load: Records: 1780564 Deleted: 0 Skipped: 0 Warnings: 0
 [Worker03] parallel.parallel_load: Records: 1780564 Deleted: 0 Skipped: 0 Warnings: 0
 [Worker04] parallel.parallel_load: Records: 1780564 Deleted: 0 Skipped: 0 Warnings: 0
 [Worker05] parallel.parallel_load: Records: 1780564 Deleted: 0 Skipped: 0 Warnings: 0
 [Worker06] parallel.parallel_load: Records: 1780564 Deleted: 0 Skipped: 0 Warnings: 0
 [Worker07] parallel.parallel_load: Records: 1780564 Deleted: 0 Skipped: 0 Warnings: 0
 [Worker08] parallel.parallel_load: Records: 1780564 Deleted: 0 Skipped: 0 Warnings: 0

100% (8.06 GB / 8.06 GB), 535.17 KB/s
File '/usr/local/mysql/mysql-files/load_data.csv' (8.06 GB) was imported in 6 min 30.0411 sec at 18.81 MB/s
Total rows affected in parallel.parallel_load: Records: 14244516 Deleted: 0 Skipped: 0 Warnings: 0

Có, chỉ mất 6 phút 30 giây. Tốc độ này nhanh hơn gấp 6 lần so với phương pháp đơn luồng và cải thiện tốc độ rất nhiều

Mysql 5.7 tải dữ liệu vào

Các tùy chọn cần được quan tâm

Dưới đây là các tùy chọn quan trọng liên quan đến việc thực hiện tải dữ liệu hiệu quả. Mỗi ngưỡng phải được cung cấp các giá trị tối ưu dựa trên tài nguyên hệ thống có sẵn (CPU / RAM / Disk IOPS), nếu không nó có thể làm giảm hiệu suất

  • chủ đề
  • BytesPerChunk
  • Tỷ lệ tối đa

chủ đề.  

Bạn có thể xác định số lượng luồng song song để xử lý dữ liệu từ tệp đầu vào đến máy chủ mục tiêu. Giá trị mặc định là 8 chủ đề

BytesPerChunk

Điều này xác định kích thước của đoạn cho mỗi cuộc gọi LOAD DATA. Tất cả các luồng sẽ xử lý đoạn riêng biệt trong quá trình hoạt động. Chúng tôi có thể xác định ngưỡng dựa trên kích thước tệp và lõi có sẵn

Tỷ lệ tối đa

Giới hạn tối đa về thông lượng dữ liệu tính bằng byte trên giây trên mỗi luồng. Sử dụng tùy chọn này nếu bạn cần tránh bão hòa mạng hoặc I/O hoặc CPU cho máy khách hoặc máy chủ đích

Hy vọng blog này giúp xác định sự khác biệt giữa hoạt động tải dữ liệu hiện có và hoạt động tải dữ liệu song song của tiện ích MySQL Shell mới nhất. Tại Mydbops, Chúng tôi đang tiếp tục thử nghiệm những điều mới trên MySQL và các công cụ liên quan, sẽ sớm quay lại với một blog thú vị

tải dữ liệu vào trong MySQL là gì?

Câu lệnh LOAD DATA INFILE đọc các hàng từ tệp văn bản vào bảng với tốc độ rất cao . Nếu từ khóa ĐỊA PHƯƠNG được chỉ định, tệp được đọc từ máy khách. Nếu LOCAL không được chỉ định, tệp phải được đặt trên máy chủ. ( ĐỊA PHƯƠNG có sẵn trong MySQL 3. 22.

Phiên bản nào của MySQL có tùy chọn tải XML?

MySQL. mysql 8. 0 Tài liệu tham khảo. 13. 2. 8 TẢI Câu lệnh XML.

Tải dữ liệu là gì?

Tải dữ liệu được định nghĩa là sao chép dữ liệu từ một tệp hoặc cơ sở dữ liệu điện tử sang một tệp khác . Tải dữ liệu ngụ ý chuyển đổi từ định dạng này sang định dạng khác; .

Quyền được triển khai trong MySQL như thế nào?

Người dùng MySQL được tạo hiện không có bất kỳ đặc quyền nào để truy cập và sửa đổi cơ sở dữ liệu. Để cấp quyền, hãy chỉ định cơ sở dữ liệu và bảng nào mà người dùng có thể giao tiếp . Cú pháp lệnh như sau. CẤP TẤT CẢ CÁC ĐẶC QUYỀN TRÊN *.