Truy vấn mysql này chạy trong khoảng 10 giờ và chưa hoàn thành. Một cái gì đó khủng khiếp sai.Xóa rất chậm trên cơ sở mysql với truy vấn phụ
Hai bảng (văn bản và spam) có tại đây. Spam lưu trữ các id của các mục nhập spam trong văn bản mà tôi muốn xóa.
DELETE FROM tname.text WHERE old_id IN (SELECT textid FROM spam);
spam chỉ có 2 cột, cả hai đều là int. Mục nhập 800K có kích thước tệp là vài Mbs. Cả hai ints là khóa chính.
văn bản có 3 cột. id (khóa chính), văn bản, cờ. khoảng 1200K mục và kích thước khoảng 2,1 gigabyte (phần lớn là spam).
Máy chủ là một quad xeon, ram 2 gigabyte (không hỏi tôi tại sao). Chỉ apache (tại sao?) Và mysqld đang chạy. Một bsd miễn phí cũ của nó và mysql 4.1.2 (không hỏi tôi tại sao)
Chủ đề: 6 Câu hỏi: 188805 Truy vấn chậm: 318 Mở: 810 Bàn tuôn ra: 1 Bảng mở: 157 Truy vấn trên giây: 7.532
Mysql my.cnf:
[mysqld]
datadir=/usr/local/mysql
log-error=/usr/local/mysql/mysqld.err
pid-file=/usr/local/mysql/mysqld.pid
tmpdir=/var/tmp
innodb_data_home_dir =
innodb_log_files_in_group = 2
join_buffer_size=2M
key_buffer_size=32M
max_allowed_packet=1M
max_connections=800
myisam_sort_buffer_size=32M
query_cache_size=8M
read_buffer_size=2M
sort_buffer_size=2M
table_cache=256
skip-bdb
log-slow-queries = slow.log
long_query_time = 1
#skip-innodb
#default-table-type=innodb
innodb_data_file_path = /usr/local/mysql/ibdata1:10M:autoextend
innodb_log_group_home_dir = /usr/local/mysql/
innodb_buffer_pool_size = 128M
innodb_log_file_size = 16M
innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit=1
#innodb_additional_mem_pool_size=1M
#innodb_lock_wait_timeout=50
log-bin
server-id=201
[isamchk]
key_buffer_size=128M
read_buffer_size=128M
write_buffer_size=128M
sort_buffer_size=128M
[myisamchk]
key_buffer_size=128M[server:~] dmesg | grep memory
real memory = 2146828288 (2047 MB)
avail memory = 2095534080 (1998 MB)
read_buffer_size=128M
write_buffer_size=128M
sort_buffer_size=128M
tmpdir=/var/tmp
các truy vấn được sử dụng chỉ là một CPU, top nói 25% thời gian CPU (do 1 trong tổng số 4).
real memory = 2146828288 (2047 MB)
avail memory = 2095534080 (1998 MB)
62 processes: 2 running, 60 sleeping
CPU states: 25.2% user, 0.0% nice, 1.6% system, 0.0% interrupt, 73.2% idle
Mem: 244M Active, 1430M Inact, 221M Wired, 75M Cache, 112M Buf, 31M Free
Swap: 4096M Total, 1996K Used, 4094M Free
PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
11536 mysql 27 20 0 239M 224M kserel 3 441:16 94.29% mysqld
Bạn có ý tưởng khắc phục sự cố không?
các công cụ lưu trữ trên bàn là gì? – JamesHalsall
Truy vấn của bạn bao gồm cột old_id, nhưng mô tả của bạn về bảng 'văn bản' không - có thực sự mô tả toàn bộ bảng không? Nói chung, tôi nghi ngờ vấn đề này sẽ kỳ diệu biến mất với một phiên bản MySQL mới hơn. –
Đảm bảo bạn có chỉ mục trên 'text.old_id' và' spam.textid'. – Johan