2011-11-23 49 views
6

Tôi đã có truy vấn khá chậm (thực sự đây là tải dữ liệu từ mysql.dump). Bây giờ tôi muốn kiểm tra xem có bao nhiêu hàng đã được tải.Tạm dừng và tiếp tục chạy truy vấn mysql

select count(*) from my_table; 

Theo dữ liệu đang tải, my_table bị khóa, vì vậy, tôi không thể thực thi sql này trước khi kết xuất được tải.

Cmd  ID State    User Host   DB  Time Query       
Query  191 update    root localhost  rehub 00:09 INSERT INTO `my_table` VALUES ... 
Query  189 Waiting for table root localhost  rehub 06:25 select count(*) from my_table 

Vì vậy, có cách để tạm dừng truy vấn 191, thực hiện truy vấn 189 và sau đó tiếp tục truy vấn 191?

+0

tôi đoán bạn có thể thử vận ​​may của mình trên information_schame.tables? – ajreal

+0

Sử dụng Oracle, nơi "nhà văn không bao giờ chặn độc giả";) –

+1

Có thể bạn thay đổi tùy chọn kết xuất không? Nếu vậy, bạn có sử dụng '-extended-insert' không? Sau đó, '–extended-insert = FALSE' có thể giúp, nhưng sẽ làm chậm quá trình nhập. –

Trả lời

4

Không có cách nào để tạm ngưng truy vấn.

Nếu bạn đang thực hiện tải hàng loạt, bạn có thể muốn sử dụng trình tải hàng loạt cam kết mỗi vài nghìn hàng.

Ngoài ra, việc sử dụng MyISAM thay vì InnoDB sẽ làm giảm bớt vấn đề này. MyISAM là một lựa chọn tốt cho việc xử lý hàng loạt, nơi bạn không chủ yếu quan tâm đến tính toàn vẹn giao dịch.

0

Bạn vẫn có thể nhận được số lượng hồ sơ đưa vào sử dụng show innodb status

2

Để trích dẫn từ manual:

Tất cả các tùy chọn mà --opt là viết tắt của cũng theo mặc định vì --opt được bật theo mặc định.

Vì vậy, khi bạn thêm –-extended-insert=FALSE--add-locks=FALSE vào tùy chọn mysqldump, lựa chọn của bạn (*) sẽ hoạt động. Tùy thuộc vào tình huống của bạn, hãy cẩn thận với các vấn đề với tính toàn vẹn tham chiếu của db của bạn. Và nó sẽ làm chậm việc nhập khẩu!

Các vấn đề liên quan