mysql 版本 5.7.31 是直接用宝塔安装的
centos7 系统 4 核 8G 内存。
现在直接执行添加唯一索引的语句已经超过几十分钟
数据库数据 1 万条左右
alter table wx_clues add unique uniq(openid
,wx_account_id
);
现在想问下 sql 为啥执行慢,有什么优化的方法。
1
pickcat 2021-01-20 11:06:01 +08:00 1
这不是 mysql 的性能问题,而是目测你上了“云”的当了。。。。。。。。。。。。。。。。
|
2
GM 2021-01-20 11:09:48 +08:00
数据库数据 1 万条,加索引几十分钟???
|
3
v2webdev 2021-01-20 11:19:51 +08:00
这估计不是 MySQL 的问题,是环境的问题。
|
4
rust 2021-01-20 11:26:48 +08:00
你这是云服务器吗?
母鸡怕不是超售到月球去了 |
5
fkname 2021-01-20 11:28:56 +08:00
手动重装一下 MySQL 试试,这个性能差的有点过分了
|
6
bbao 2021-01-20 11:30:13 +08:00
mysql 版本 5.7.31 是直接用宝塔安装的
centos7 系统 4 核 8G 内存。 现在直接执行添加唯一索引的语句已经超过几十分钟 数据库数据 1 万条左右 alter table wx_clues add unique uniq(openid,wx_account_id); 现在想问下 sql 为啥执行慢,有什么优化的方法。 1,不懂如何运维&优化配置&扩容等一系列问题 买云服务 2,2000 数据,alter table 添加索引,4 给小时左右 3,执行慢,优化方法,google,搜到的比你问的全面 |
8
awanganddong OP 刚刚添加唯一索引的 sql 死了,然后把 mysqld 搞挂了
我先分析下 |
9
awanganddong OP [client]
#password = your_password port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 socket = /tmp/mysql.sock datadir = /www/server/data default_storage_engine = InnoDB performance_schema_max_table_instances = 400 table_definition_cache = 400 skip-external-locking key_buffer_size = 128M max_allowed_packet = 100G table_open_cache = 512 sort_buffer_size = 2M net_buffer_length = 4K read_buffer_size = 2M read_rnd_buffer_size = 256K myisam_sort_buffer_size = 32M thread_cache_size = 64 query_cache_size = 64M tmp_table_size = 64M sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES explicit_defaults_for_timestamp = true #skip-name-resolve max_connections = 500 max_connect_errors = 100 open_files_limit = 65535 log-bin=mysql-bin binlog_format=mixed server-id = 1 expire_logs_days = 10 slow_query_log=1 slow-query-log-file=/www/server/data/mysql-slow.log long_query_time=3 #log_queries_not_using_indexes=on early-plugin-load = "" innodb_data_home_dir = /www/server/data innodb_data_file_path = ibdata1:10M:autoextend innodb_log_group_home_dir = /www/server/data innodb_buffer_pool_size = 512M innodb_log_file_size = 256M innodb_log_buffer_size = 64M innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50 innodb_max_dirty_pages_pct = 90 innodb_read_io_threads = 4 innodb_write_io_threads = 4 [mysqldump] quick max_allowed_packet = 500M [mysql] no-auto-rehash [myisamchk] key_buffer_size = 128M sort_buffer_size = 2M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout |
10
jump2cn 2021-01-20 11:53:04 +08:00
自己遍历 1w 数据都不用几十分钟
|
11
markgor 2021-01-20 12:21:41 +08:00
1W 条数据,加索引,几十分钟....随便一台普通 PC 机都超过你
[![sRjlnA.png]( https://s3.ax1x.com/2021/01/20/sRjlnA.png)]( https://imgchr.com/i/sRjlnA) 希捷 7200 hdd,4G 内存,E6700 CPU 。393216 笔记录加唯一索引只要不到 0.632 秒,当然测试用的表,数据比较简单栏位比较少。供你参考 |
12
dnsaq 2021-01-20 12:34:22 +08:00
这和自建有关系?在普通人眼里"云"是不是就是神?
|
13
IDAEngine 2021-01-20 12:56:14 +08:00
测一下云服务器性能吧,估计母鸡超售了,云服务器基本都会超售,没法保证整体的性能。
对于云服务器来说配置只是个数字而已 |
14
rekulas 2021-01-20 13:04:02 +08:00
现在的 vps 再垃圾都不至于这么慢 看看执行中的进程什么状态 是不是阻塞了
|
15
junan0708 2021-01-20 13:32:15 +08:00
被锁了吧,看看进程 kill 掉,重新加
|
16
nodesolar 2021-01-20 13:35:44 +08:00
应该是在等 MDL 锁
|
17
interim 2021-01-20 13:54:07 +08:00
先跑下性能测试脚本,可否告知是哪个云?
|
18
awanganddong OP 阿里云的机器,应该是锁的问题,重启了下 mysql,现在没问题的,但是还要配置下慢日志的参数,现在检测日志没记录下来。
|
19
v2orz 2021-01-20 14:01:29 +08:00
如果是学习的话,建议是系统的学习一下 mysql 相关的知识
如果是仅使用,个人觉得这种情况直接买云服务是最合适的场景 |
20
CallMeReznov 2021-01-20 14:03:35 +08:00
云服务器超售最可怕的不是 CPU,内存,带宽,而是不知道你邻居在跑什么东西争抢你当前实体机的硬盘 IO.
建议看磁盘 IO wait,估计延迟得上天. |
21
encro 2021-01-20 14:07:55 +08:00
1,看服务器性能,负载怎么样;瓶颈在 cpu 还是磁盘还是内存,1 万记录非常少,任何 ssd 应该都是几秒钟即可;
2,可能是锁住了,等待其他进程释放,参考:Mysql 不锁表增加字段和索引方法 https://c4ys.com/archives/1943 |
22
PetterZhu 2021-01-20 21:28:15 +08:00
加锁的可能性比较大,1w 条数据,再怎么烂的机器也要不了 10 几分钟,
|
23
awanganddong OP 只有几条数据的表,alter 语句就提示 Waiting for table metadata lock
现在正在追这个问题 |
24
awanganddong OP SELECT * from information_schema.INNODB_TRX
Kill id(上面查询出来的 trx_mysql_thread_id) 这两条可以查找到死锁的线程 ID |