mysql 版本 5.7.31 是直接用宝塔安装的
centos7 系统 4 核 8G 内存。
现在直接执行添加唯一索引的语句已经超过几十分钟
数据库数据 1 万条左右
alter table wx_clues add unique uniq(openid,wx_account_id);  
现在想问下 sql 为啥执行慢,有什么优化的方法。
|  |      1pickcat      2021-01-20 11:06:01 +08:00  1 这不是 mysql 的性能问题,而是目测你上了“云”的当了。。。。。。。。。。。。。。。。 | 
|      2GM      2021-01-20 11:09:48 +08:00 数据库数据 1 万条,加索引几十分钟??? | 
|  |      3v2webdev      2021-01-20 11:19:51 +08:00 这估计不是 MySQL 的问题,是环境的问题。 | 
|  |      4rust      2021-01-20 11:26:48 +08:00 你这是云服务器吗? 母鸡怕不是超售到月球去了 | 
|  |      5fkname      2021-01-20 11:28:56 +08:00 手动重装一下 MySQL 试试,这个性能差的有点过分了 | 
|      6bbao      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,搜到的比你问的全面 | 
|      8awanganddong OP 刚刚添加唯一索引的 sql 死了,然后把 mysqld 搞挂了 我先分析下 | 
|      9awanganddong 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 | 
|  |      10jump2cn      2021-01-20 11:53:04 +08:00 自己遍历 1w 数据都不用几十分钟 | 
|  |      11markgor      2021-01-20 12:21:41 +08:00 1W 条数据,加索引,几十分钟....随便一台普通 PC 机都超过你 []( https://imgchr.com/i/sRjlnA) 希捷 7200 hdd,4G 内存,E6700 CPU 。393216 笔记录加唯一索引只要不到 0.632 秒,当然测试用的表,数据比较简单栏位比较少。供你参考 | 
|      12dnsaq      2021-01-20 12:34:22 +08:00 这和自建有关系?在普通人眼里"云"是不是就是神? | 
|  |      13IDAEngine      2021-01-20 12:56:14 +08:00 测一下云服务器性能吧,估计母鸡超售了,云服务器基本都会超售,没法保证整体的性能。 对于云服务器来说配置只是个数字而已 | 
|  |      14rekulas      2021-01-20 13:04:02 +08:00 现在的 vps 再垃圾都不至于这么慢 看看执行中的进程什么状态 是不是阻塞了 | 
|      15junan0708      2021-01-20 13:32:15 +08:00 被锁了吧,看看进程 kill 掉,重新加 | 
|      16nodesolar      2021-01-20 13:35:44 +08:00 应该是在等 MDL 锁 | 
|  |      17interim      2021-01-20 13:54:07 +08:00 先跑下性能测试脚本,可否告知是哪个云? | 
|      18awanganddong OP 阿里云的机器,应该是锁的问题,重启了下 mysql,现在没问题的,但是还要配置下慢日志的参数,现在检测日志没记录下来。 | 
|      19v2orz      2021-01-20 14:01:29 +08:00 如果是学习的话,建议是系统的学习一下 mysql 相关的知识 如果是仅使用,个人觉得这种情况直接买云服务是最合适的场景 | 
|      20CallMeReznov      2021-01-20 14:03:35 +08:00 云服务器超售最可怕的不是 CPU,内存,带宽,而是不知道你邻居在跑什么东西争抢你当前实体机的硬盘 IO. 建议看磁盘 IO wait,估计延迟得上天. | 
|  |      21encro      2021-01-20 14:07:55 +08:00 1,看服务器性能,负载怎么样;瓶颈在 cpu 还是磁盘还是内存,1 万记录非常少,任何 ssd 应该都是几秒钟即可; 2,可能是锁住了,等待其他进程释放,参考:Mysql 不锁表增加字段和索引方法 https://c4ys.com/archives/1943 | 
|      22PetterZhu      2021-01-20 21:28:15 +08:00 加锁的可能性比较大,1w 条数据,再怎么烂的机器也要不了 10 几分钟, | 
|      23awanganddong OP 只有几条数据的表,alter 语句就提示 Waiting for table metadata lock 现在正在追这个问题 | 
|      24awanganddong OP SELECT * from information_schema.INNODB_TRX Kill id(上面查询出来的 trx_mysql_thread_id) 这两条可以查找到死锁的线程 ID |