存档

文章标签 ‘mysql’

为什么交换影响了mysql性能

2010年1月19日

MySQL或使用其他应用程序或操作系统的框太多的内存行为滑稽和使用更多的内存和高速缓存的应用推动互换。这将导致交换,造成性能问题。这是显而易见的。但如何坏的呢?如果你指望它同正常磁盘IO的框正在或不如它?

交换会影响你的表现不仅仅是普通IO和这里有3原因。如果你知道更多信息,请让我知道,我的口味这3人已经够糟,所以我没有更多的期待。

在交换文件缓存将成倍木卫一相比,只有较少的缓存。会发生什么事,在缓存页面取代,超出自身交换?首先,你必须找到空间来交换在页面(我们谈论的内存压力吗?),这意味着交换了一些网页。这通常发生在后台,但仍然有许多工作要做。当网页的交换是在第二IO和最后你页面被缓存从硬盘驱动器的缓存读取。这给我们3 IO的,而不是一个。尼斯:)
法拉盛脏页,甚至抛弃的网页会造成额外的木卫一速度变慢。

扭曲了所有的数据库内部算法调整为在内存中的东西,如果被他们开始处理数据的磁盘上,他们往往只是停止与任何有效的工作,是合理的水平算法 - 交易时,数据库与磁盘上的数据,往往使用不同的设置其中的算法进行了优化,内部监督办公室的数量限制,或使它们更加顺序。其中大部分被设计在SSD的时代。例如,在MySQL的插入缓冲区作出特别的努力以避免(延迟)的IO接口。如果碰巧去交换文件,将超过原有的精神。后台线程数的设计与假设他们可以检查缓冲池页状态非常有效,再次停止工作,尽快页面访问导致磁盘IO。

升级锁定/如果突破闭锁的内部运作不坏自己足够让我们看看没有什么交换的并行(多CPU,多客户端)处理。数据库锁/锁存器通常设计举行尽可能短的时间。执行的时间花在线程少部分持有排他锁系统将更好的规模。这是一个很严重的不举行任何重要的锁,而你正在做的IO的需要很长时间磁盘IO。当交换系统所有这些得到弄糟 - 数据库的想法时,它正在采取一些指示锁只有它可以很长一段时间,而木卫一完成 - 如果这是关键锁就可以看到系统的一切等待这木卫一,即使交易,与数据的工作是不是在交换文件。

底线:您应该配置制度,使没有交换活动将在正常经营业务。交换文件本身可能是合理的 - 如果你有一些意外的内存消耗穗您可能更愿意看到放缓,而不是MySQL的是,由于内存不足的死亡,但对他们的反应不及时和不正常的对待这种情况。

技术文档,

查看nginx,apache,mysql,php的编译参数

2009年11月27日

查看nginx编译参数:/usr/local/nginx/sbin/nginx -V
查看apache编译参数:cat /usr/local/apache/build/config.nice
查看mysql编译参数:cat /usr/local/mysql/bin/mysqlbug | grep CONFIGURE_LINE
查看php编译参数:/usr/local/php/bin/php -i | grep configure 或者 /usr/local/php/bin/php-config

技术文档, , , ,

数据水平切分后的主键全局唯一方案

2009年9月29日

现在通过数据的水平切分(sharding)来实现数据库 Scale Out 的解决方案受到了越来越多人的青睐,但是在切分过程中可能遇到的问题也肯定不在少数,如切分规则的设计,切分后的访问路由,切分后的主键的全局唯一等等。

这里我主要列举几个可以使用在 MySQL 数据库主键全局唯一方案及其优劣,供大家参考:

  • 通过应用程序生成一个GUID,然后和数据一起插入切分后的集群。优点是维护简单,实现也容易。缺点是应用的计算成本较大,且GUID比较常,占用数据库存储空间较大,涉及到应用的开发。
  • 通过独立的应用程序事先在数据库中生成一系列唯一的 ID,各应用程序通过接口或者自己去读取再和数据一起插入到切分后的集群中。优点是全局唯一主键简单,维护相对容易。缺点是实现复杂,需要应用开发。
  • 通过中心数据库服务器利用数据库自身的自增类型(如 MySQL的 auto_increment 字段),或者自增对象(如 Oracle 的 Sequence)等先生成一个唯一 ID 再和数据一起插入切分后的集群。优点是?好像没有特别明显的优点。缺点是实现较为复杂,且整体可用性维系在这个中心数据库服务器上,一旦这里crash 了,所有的集群都无法进行插入操作,涉及到应用开发。
  • 通过集群编号加集群内的自增(auto_increment类型)两个字段共同组成唯一主键。优点是实现简单,维护也比较简单,对应用透明。缺点是引用关联操作相对比较复杂,需要两个字段,主键占用空间较大,在使用 InnoDB 的时候这一点的副作用很明显。
  • 通过设置每个集群中自增 ID 起始点(auto_increment_offset),将各个集群的ID进行绝对的分段来实现全局唯一。当遇到某个集群数据增长过快后,通过命令调整下 一个 ID 起始位置跳过可能存在的冲突。优点是实现简单,且比较容易根据 ID 大小直接判断出数据处在哪个集群,对应用透明。缺点是维护相对较复杂,需要高度关注各个集群 ID 增长状况。
  • 通过设置每个集群中自增 ID 起始点(auto_increment_offset)以及 ID 自增步长(auto_increment_increment),让目前每个集群的起始点错开 1,步长选择大于将来基本不可能达到的切分集群数,达到将 ID 相对分段的效果来满足全局唯一的效果。优点是实现简单,后期维护简单,对应用透明。缺点是第一次设置相对较为复杂。

除了上述方案之外,各位网友如果想到什么比较巧妙的解决方案,希望能不吝分享。

原文链接:http://www.jianzhaoyang.com/database/sharding_groups_global_pk

杂事