跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 自建 mysql 的性能问题
未分類
5 2 月 2021

自建 mysql 的性能问题

自建 mysql 的性能问题

資深大佬 : awanganddong 10

mysql 版本 5.7.31 是直接用宝塔安装的

centos7 系统 4 核 8G 内存。

现在直接执行添加唯一索引的语句已经超过几十分钟 数据库数据 1 万条左右 alter table wx_clues add unique uniq(openid,wx_account_id);

现在想问下 sql 为啥执行慢,有什么优化的方法。

大佬有話說 (24)

  • 資深大佬 : pickcat

    这不是 mysql 的性能问题,而是目测你上了“云”的当了。。。。。。。。。。。。。。。。

  • 資深大佬 : GM

    数据库数据 1 万条,加索引几十分钟???

  • 資深大佬 : v2webdev

    这估计不是 MySQL 的问题,是环境的问题。

  • 資深大佬 : rust

    你这是云服务器吗?
    母鸡怕不是超售到月球去了

  • 資深大佬 : fkname

    手动重装一下 MySQL 试试,这个性能差的有点过分了

  • 資深大佬 : bbao

    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,搜到的比你问的全面

  • 資深大佬 : bbao

    @bbao 2000 万数据

  • 主 資深大佬 : awanganddong

    刚刚添加唯一索引的 sql 死了,然后把 mysqld 搞挂了
    我先分析下

  • 主 資深大佬 : awanganddong

    [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

  • 資深大佬 : jump2cn

    自己遍历 1w 数据都不用几十分钟

  • 資深大佬 : markgor

    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 秒,当然测试用的表,数据比较简单栏位比较少。供你参考

  • 資深大佬 : dnsaq

    这和自建有关系?在普通人眼里”云”是不是就是神?

  • 資深大佬 : IDAEngine

    测一下云服务器性能吧,估计母鸡超售了,云服务器基本都会超售,没法保证整体的性能。

    对于云服务器来说配置只是个数字而已

  • 資深大佬 : rekulas

    现在的 vps 再垃圾都不至于这么慢 看看执行中的进程什么状态 是不是阻塞了

  • 資深大佬 : junan0708

    被锁了吧,看看进程 kill 掉,重新加

  • 資深大佬 : nodesolar

    应该是在等 MDL 锁

  • 資深大佬 : chnyuwen

    先跑下性能测试脚本,可否告知是哪个云?

  • 主 資深大佬 : awanganddong

    阿里云的机器,应该是锁的问题,重启了下 mysql,现在没问题的,但是还要配置下慢日志的参数,现在检测日志没记录下来。

  • 資深大佬 : v2orz

    如果是学习的话,建议是系统的学习一下 mysql 相关的知识

    如果是仅使用,个人觉得这种情况直接买云服务是最合适的场景

  • 資深大佬 : CallMeReznov

    云服务器超售最可怕的不是 CPU,内存,带宽,而是不知道你邻居在跑什么东西争抢你当前实体机的硬盘 IO.
    建议看磁盘 IO wait,估计延迟得上天.

  • 資深大佬 : encro

    1,看服务器性能,负载怎么样;瓶颈在 cpu 还是磁盘还是内存,1 万记录非常少,任何 ssd 应该都是几秒钟即可;
    2,可能是锁住了,等待其他进程释放,参考:Mysql 不锁表增加字段和索引方法 https://c4ys.com/archives/1943

  • 資深大佬 : PetterZhu

    加锁的可能性比较大,1w 条数据,再怎么烂的机器也要不了 10 几分钟,

  • 主 資深大佬 : awanganddong

    只有几条数据的表,alter 语句就提示 Waiting for table metadata lock

    现在正在追这个问题

  • 主 資深大佬 : awanganddong

    SELECT * from information_schema.INNODB_TRX

    Kill id(上面查询出来的 trx_mysql_thread_id)

    这两条可以查找到死锁的线程 ID

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具