参考:

一  大的优化方向: 数据结构优化,慢查询优化,索引优化,mysql参数设置优化

数据结构优化:先读写分离、再垂直拆分、再水平拆分!

说3点

1. 设计合适的索引,基于主键的查找,上亿数据也是很快的;

2. 反范式化设计,以空间换时间,避免join,有些join操作可以在用代码实现,没必要用数据库来实现;

3. buffer,尽量让内存大于数据.

至于优化若是指创建好的表,不能变动表结构的话,那建议InnoDB引擎,多利用点内存,减轻磁盘IO负载,因为IO往往是数据库服务器的瓶颈

来自:http://www.zhihu.com/question/19719997

我的问题:两个数据库,database A 和 B(be)  ;每个都有两个表event和id

A

id表增长到不会超过1亿,然后会有频繁的更新.更新需要查找id值。这个亦可以分表。按照gid的不同,在程序中处理插入不同哦功能的表

每天生成一个新表,然后整体再插入总表??

event表一直累加,会超过1亿,需要自动切表

问题:1  数据库是否是瓶颈?  再开几个进程看数据库插入更新会不会有加速现象.多开程序的作用已经不大,很微小。所以瓶颈在数据库上了

2 瓶颈在哪里?  insert时间花费0--100毫秒  ,update 100--1000ms

具体做法:

原来查看速度:

Com_insert                    100

Com_update                    30

以下测试再关闭程序debug日志的情况下进行

使用gprof分析程序得到 parsesql占23.5%,parseupdatesql15.5%,jsontomap占23.5,推测数据库执行占40%?

1     程序是瓶颈,开了6个进程

原来速度:

2013.09.26 。10:00        开了6个进程来跑。速度

第一次测试    第二次测试

Com_insert                    489                     342

Com_update                   204                     182

措施:加内寸,拆表

得到结论: 1  只写入event表,看会不会堵塞。不需要做这个实验,DBA自动切表就行,这样就很小。

2      数据库表很大的时候,主要考虑IO速度慢的问题,因为表太大,不能全部放进内存,所以需要硬盘IO,引起速度慢。

1 查看表大小,event表占35G,gid表占3G。

数据库设定的内存大小是10G,event是在太大了,导致频繁的磁盘IO。

A   gid

TABLE_NAME  | DATA_LENGTH | DATA_LENGTH+INDEX_LENGTH | TABLE_ROWS |

+-------------+-------------+--------------------------+------------+

| Mapping_gid |  2980036608 |               3606970368 |    5162861 |

+-------------+-------------+--------------------------+-----------

event

+------------------------+-------------+--------------------------+------------+

| TABLE_NAME             | DATA_LENGTH | DATA_LENGTH+INDEX_LENGTH | TABLE_ROWS |

+------------------------+-------------+--------------------------+------------+

| Mapping_event_20130925 | 29944184832 |              33361494016 |   61712037 |

+------------------------+-------------+--------------------------+------------+

B  gid

+-------------+-------------+--------------------------+------------+

| TABLE_NAME  | DATA_LENGTH | DATA_LENGTH+INDEX_LENGTH | TABLE_ROWS |

+-------------+-------------+--------------------------+------------+

| Mapping_gid |  2173698048 |               2702901248 |    4216890 |

+-------------+-------------+--------------------------+------------+

event

------------------------+-------------+--------------------------+------------+

| TABLE_NAME             | DATA_LENGTH | DATA_LENGTH+INDEX_LENGTH | TABLE_ROWS |

+------------------------+-------------+--------------------------+------------+

| Mapping_event_20130925 |  6227492864 |               6919553024 |   15018002 |

对策:把event按每天备份 ; 这样每天的event表就很小。

结果:

第一次测试

Com_insert

Com_update                    552

3  修改程序,原来程序insert不成功然后再update,改成insert into  duplicate

可以解决的问题:1 多个进程写数据,id会跳跃性自增    2  两条变一条

各位,请教一个mysql问题。

说明:数据库id是主键,gid是唯一索引。insert into duplicate使用gid作为条件。

问题如下:

昨天我使用insert into duplicate 试验了很久、

我开了两个进程。都执行insert into duplicate语句。

进程A事实上只执行update,进程B 事实上只执行insert

单独开A时,id不变,单独开B,id是顺序增长同时开A,B,id跳跃性增长的。

可有什么解决方案推荐,使得id是顺序+1增长的?

解释: 只能说 insert
into duplicate 也使得id 自增了.但是如果后来执行的是update操作,撤销了.

可设置 innodb_autoinc_lock_mode = 0 使的获取自增id的锁方式为表锁,
但是此参数是全局的(即影响所有表,且需重启数据库生效),对于高并发写入的数据,会影响插入性能,不建议

如果使用insert into duplicate 只能解决两条变一条,不能解决id问题。

我具体做法:(1)开了多份程序,提高了数据库写入和更新的速度

(2) 加大内存

未填加内存前速度 -loginfo:

Com_insert            Com_update

400                              160

(3)修改字段

(4)拆表

mysql 千万量级的表的优化的更多相关文章

  1. Mysql千万级大表优化

    Mysql的单张表的最大数据存储量尚没有定论,一般情况下mysql单表记录超过千万以后性能会变得很差.因此,总结一些相关的Mysql千万级大表的优化策略. 1.优化sql以及索引 1.1优化sql 1 ...

  2. 如何优化MySQL千万级大表

    很好的一篇博客,转载 如何优化MySQL千万级大表 原文链接::https://blog.csdn.net/yangjianrong1985/article/details/102675334 千万级 ...

  3. MySQL千万级大表优化解决方案

    MySQL千万级大表优化解决方案 非原创,纯属记录一下. 背景 无意间看到了这篇文章,作者写的很棒,于是乎,本人自私一把,把干货保存下来.:-) 问题概述 使用阿里云rds for MySQL数据库( ...

  4. (转载)MYSQL千万级数据量的优化方法积累

    转载自:http://blog.sina.com.cn/s/blog_85ead02a0101csci.html MYSQL千万级数据量的优化方法积累 1.分库分表 很明显,一个主表(也就是很重要的表 ...

  5. 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案

    如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案

  6. Mysql千万级大表优化策略

    1.优化sql以及索引 1.1优化sql 1.有索引但未被用到的情况(不建议) (1)避免like的参数以通配符开头时 尽量避免Like的参数以通配符开头,否则数据库引擎会放弃使用索引而进行全表扫描. ...

  7. MySQL千万级多表关联SQL语句调优

    本文不涉及复杂的底层数据结构,通过explain解释SQL,并根据可能出现的情况,来做具体的优化.   需要优化的查询:使用explain      出现了Using temporary:       ...

  8. MYSQL千万级数据量的优化方法积累

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  9. 一次MySQL两千万数据大表的优化过程,三种解决方案

    问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务 ...

随机推荐

  1. parseInt第二个参数详解

    前阵子在stackOverflow上看到两个这样的问题: 为什么parseInt(8,3) == NaN,parseInt(16,3) == 1? 为什么parseInt('dsff66',16) = ...

  2. 天天模拟器 和 Genymotion 设置代理

    之前以为是10.0.3.1或者本机IP,尝试几次都不行,百度之,得到答案,原来genymotion里面网关的IP是10.0.3.2 所以,代理IP要设置为:10.0.3.2

  3. CSS中Padding的用法

    Padding的英文意思是填充,在CSS中则是设置内边距属性. padding不允许使用负值 1. 四个参数时: padding: 10px,20px,30px,40px; 上边距:10px 右边距: ...

  4. MAC地址查询 Linux/Unix操作系统mac地址怎么查

    Linux/Unix操作系统熟悉的人都通常是用console命令控制台来进行相应的操作.  Linux/Unix操作系统查看网卡mac地址的方法可以通过以下命令获得: 1.ifconfig -a 2. ...

  5. OOD/DDP 中的 SRP 原则

    单一职责原则 SRP(The Single Responsibility Principle):一个类应该只有一个发生变化的原因.这里的变化指职责的变化. SRP 很好理解,它的要求是 让一个类只做一 ...

  6. 动画原理——脉动(膨胀缩小)&&无规则运动

    书籍名称:HTML5-Animation-with-JavaScript 书籍源码:https://github.com/lamberta/html5-animation 1.脉动是一种半径r来回反复 ...

  7. Jenkins 子业务日志拆分分析方法

    需求 Jenkins日志打印内容很长,或者并发编译导致,日志内容不容易查看. 对于具体业务失败, 开发者希望看到具体业务自身的日志内容. 解法 tee 命令能够保证, shell命令执行的内容,即往控 ...

  8. js html标签select 中option 删除除了第一行外的其他行

    背景:共两个下拉框,第一个下拉框选择完之后,以第一个选定的值为条件返回第二个下拉框中的内容,用js中的createElement()创建,并利用appendChild()来添加进父标签.出现意外:每次 ...

  9. POJ2635-The Embarrassed Cryptographer-大整数素因子

    计算一个大整数(10^100)中有没有一个小于L的素因子.这个大整数是两个素数的乘积.其实就是RSA加密. 做法是把大整数表示成千进位,用数组存储,然后一位一位地取模. /*------------- ...

  10. Java界面编程—事件监听机制

    组件首先要先注册事件处理器,当用户单击组件.移动鼠标或者敲击键盘时都会产生事件(Event),一旦有时间发生,应用程序就会做出对该事件的响应,这些组件就是事件源(Event source). 接受.解 ...