V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
kxjhlele
V2EX  ›  MySQL

问一下 MySQL 参数 大数据量低并发的优化建议

  •  
  •   kxjhlele · 2015-08-12 11:21:08 +08:00 · 4024 次点击
    这是一个创建于 3389 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我是windows server2008 r2系统,128G内存,平时可用60G跑MySQL 极限可以100G跑MySQL

    基本就我自己使用这个服务器,平时主要就是 LOAD DATA INFILE 数据,查询数据,主要就是Count()。但是数据量比较大,基本一个csv都是50G到60G大概10亿行吧,因为都是单纯的查询,所以采用的引擎是myisam。

    遇到过一个问题,在一张表上面建立一个索引查询ok,在增加一个索引查询ok,在增加一个索引查询就都是空数据了,搞不懂为啥会这样。

    尝试过PostgreSQL,但是我们的csv 换行符间隔符都不一样,导入PostgreSQL很多都出错。有其他建议吗?

    想问一下下面这个参数可以吗?水平比较低。还有什么优化建议?
    [client]
    port = 3306
    socket = /tmp/mysql.sock
    default-character-set=gbk

    [mysqld]
    port = 3306
    socket = /tmp/mysql.sock
    character-set-server=gbk
    skip_name_resolve
    skip-slave-start

    interactive_timeout = 28800000
    wait_timeout = 2147483

    table_open_cache = 1024
    max_allowed_packet = 64M

    key_buffer_size = 20G # 索引大小
    sort_buffer_size = 1G # 排序大小
    read_buffer_size = 5G # 全表扫描大小
    read_rnd_buffer_size = 1G 索引扫描大小

    thread_cache_size = 64
    ft_min_word_len = 4
    default-storage-engine = MYISAM
    transaction_isolation = REPEATABLE-READ

    tmp_table_size = 50G # 临时表
    max_heap_table_size = 50G # 内存表

    myisam_sort_buffer_size = 10G # 排序缓存区:创建修改索引排序时用
    myisam_max_sort_file_size = 50G # 最大临时文件:创建修改索引,导入数据
    myisam_repair_threads = 1
    myisam_recover_options

    server-id = 1

    [mysqldump]
    quick
    max_allowed_packet = 128M
    [mysql]
    no-auto-rehash
    default-character-set=gbk
    [myisamchk]
    key_buffer_size = 512M
    sort_buffer_size = 512M
    read_buffer = 64M
    write_buffer = 64M
    [mysqlhotcopy]
    interactive-timeout
    [mysqld_safe]
    open-files-limit = 8192
    7 条回复    2015-08-13 11:58:49 +08:00
    usernametoolong
        1
    usernametoolong  
       2015-08-12 12:33:59 +08:00
    划分几十G内存出来当硬盘用,前提做好热备份。

    其他的表以及结构和参数的优化,坐等楼下的大拿来说。
    ning1022
        2
    ning1022  
       2015-08-12 16:25:02 +08:00
    这么大的数据,没有接触过!!!把经常需要在where 后的字段加索引,用explain 查查看为啥慢,或者用第三方工具测试下。
    johnnyR
        3
    johnnyR  
       2015-08-12 21:55:26 +08:00
    key_buffer_size = 20G !?超算麽?
    choury
        4
    choury  
       2015-08-12 23:51:39 +08:00
    什么版本的mysql?请换innodb,然后将innodb的缓存开到50G
    kxjhlele
        5
    kxjhlele  
    OP
       2015-08-13 09:21:36 +08:00
    @choury 因为经常算 Count() 所以没有采用innodb,并且是导入数据用innodb速度太慢。目前我想利用触发器插入数据的时候直接分表,但我发现分表数据可以插入成功,但是总表也有数据,每次都2倍的数据量。
    kxjhlele
        6
    kxjhlele  
    OP
       2015-08-13 09:24:01 +08:00
    @johnnyR 反正没报错,不过利用率也不高,无所谓的,反正也是我自己用,配置大点内存也够用,现在主要是不知道调整那些参数可以比较明显的提升数据库性能,感觉现在电脑io受限,
    liprais
        7
    liprais  
       2015-08-13 11:58:49 +08:00
    这种需求请用hive
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4313 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 01:03 · PVG 09:03 · LAX 17:03 · JFK 20:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.