我有一个巨大的My_ISAM表"msg_c_total“,它实际上被划分为"msg_c_1”到"msg_c_200“。我想用一个新名字做一个"msg_c_total“的innoDB拷贝。我仍然不能更改原始表(并将其更改为innoDB),因为一些存储过程仍然在分区表上工作。
我创建了一个新的innoDB表(只有一个索引,以避免插入时速度变慢)。然后,我使用了以下命令。30分钟后,查询仍在运行,新表中没有记录。MySQL也逐渐变得反应迟钝。
INSERT into msg_new SELECT * FROM msg_c_total1- Percona工具是否提供了一些东西来制作副本(希望逐渐地做,以避免服务器上的严重减速)。
2-有没有一种方法可以逐渐运行上面的"insert into“(并且自动地不向select命令添加范围)。
谢谢。
服务器配置:
ft_min_word_len =3
connect_timeout =15
join_buffer_size =4M
key_buffer_size =6G
max_allowed_packet =2M
max_connections =2600
max_connect_errors =30
myisam_sort_buffer_size =528M
read_buffer_size =4M
read_rnd_buffer_size =4M
sort_buffer_size =4M
table_cache =512
thread_cache_size =256
thread_concurrency =16
wait_timeout =120
max_tmp_tables =512
tmp_table_size =512M
max_heap_table_size =512M
interactive_timeout =1800
query_cache_type =1
query_cache_size =512M
skip-external-locking
skip-name-resolve
myisam-recover =FORCE,BACKUP
concurrent_insert =2
open-files =30000
event_scheduler=ON
innodb_file_per_table
innodb_data_home_dir = /app/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_buffer_pool_size = 30G
innodb_additional_mem_pool_size = 256M
innodb_log_file_size = 1256M
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 2
innodb_lock_wait_timeout = 50
innodb_table_locks = 0
innodb_support_xa = 0
innodb_thread_concurrency = 16
skip-innodb_doublewrite
innodb_buffer_pool_restore_at_startup = 1
long_query_time = 3发布于 2020-09-01 08:16:23
MyISAM仅锁定整个表。该SELECT正在阻止所有写入。
您所说的分区是指“分区方式...”msg_c_1是一个分区名吗?或者是msg_c_1表名,并且您正在使用代码选择适当的表
请提供SHOW CREATE TABLE;有许多字幕可供选择。
这个“表”是由什么分区的?
200个分区是一个相当大的数量。
什么是PRIMARY KEY?有没有UNIQUE钥匙?
我可能会推荐像http://localhost/rjweb/mysql/doc.php/deletebig#deleting_in_chunks这样的工具来分块复制。(忽略'delete‘和'update';专注于分块。)但是,由于PK没有与MyISAM中的数据集群在一起,因此一些性能将不可用。
有多少内存?key_buffer_size和innodb_buffer_pool_size的设置是什么?有关使用这两个引擎时的操作,请参阅http://localhost/rjweb/mysql/doc.php/memory。
https://stackoverflow.com/questions/63666233
复制相似问题