testing-04

MySQL

  • Flachcache初探

    ·

    Flashcache是Facebook技术团队的又一力作,最初是为加速MySQL设计的。Flashcache是在Linux层面的,所以任何受磁盘IO困绕的软件或应用都可以方便的使用之。

    1. Why Flashcache

    随着时间的流逝,网站上的数据一直在不停的积累。如果你经营的只是一个博客的话,这不会是问题,因为10G的空间,大概就够你写一辈子了(如果放在硬盘上,其实一辈子很短)。如果你恰巧在一个快速增长的公司,数据会越来越多,从MB,到GB,再到TB。

    如果将这些数据全部放在大容量的SATA、SAS盘上时,会发现性能(响应时间)不够;如果全放在SSD上时,又会发现成本很高。即使公司能够大气到都放到SSD上,你会发现1TB的数据里面可能只有200G是经常被访问的,300G可能偶尔被访问到,最后剩下的500G可能已经成为历史数据了,几乎不被访问到,如果全部都放在SSD上有略有浪费。于是就有了Flashcache

    Flashcache一个非常不错的软件(准确的说是一个Linux的模块),可以动态加载。Flashcache通过在文件系统(VFS)和设备驱动之间新增了一次缓存层,来实现对热门的缓存。Flashcache是另一种缓存,一般用SSD作为介质的缓存(一般的缓存用的是内存),通过将传统硬盘上的热门数据缓存到SSD上,然后利用SSD优秀的读性能,来加速系统。这个方法较之内存缓存,没有内存快,但是空间可以比内存大很多。

    本文是一个关于Flashcache的初步介绍。 (more…)

  • 这是在2010年,第一次淘宝数据库技术沙龙上的一次分享,包含了淘宝在MySQL技术上的探索:

    • 如何批量化管理
    • 如何监控
    • 如何测试
    • 如何保持生产环境稳定性等
    managemysqlwithopensource-100620074016-phpapp01

    下载链接:Manage MySQL with Open Source

  • MySQL/InnoDB和Group Commit(1)

    ·

    估计相关的东西一篇文章是讲不清楚的。

    这个问题由来已久,Kristian Nielsen连续写了四篇文章《Fixing MySQL group commit》(part 1 | part 2 | part 3 | part 4 )深入细致的分析了“故事”的前因后果。本文完全没有任何新意,仅做一个小的总结。这里会先介绍一下什么是“Group Commit”,MySQL/InnoDB里面的Group Commit为什么引起如此大的关注,现在是怎么解决问题的。 (more…)

  • 这是该系列的第三篇文章(12)了。之所以选择并发线程控制着手研究InnoDB的代码有两个原因:第一,这段代码相对独立,不要了解太多的相关代码就可以理解;第二,稍微多看一些代码你会发现,到处都是线程并发控制相关的代码出现,所以这也是一个基础。

    第一篇中,介绍了InnoDB内部排他锁的实现,第二篇则介绍InnoDB内部读写锁的实现原理(这里说的“内部”是为了区别于数据库层面的读写锁)。本篇则将延续第二篇,介绍读写锁相关的代码实现。 (more…)

  • Manage MySQL With Open Source

    ·

    上次在一个“数据库技术论坛”上分享MySQL管理方面的一些经验,这里把PPT分享一下:

    – -EOF- –

  • 前面做了一个开始,沿着路慢慢走下去。

    0. 起源

    开始之前,这里可以说说这次准备开始研究源代码的一个很大诱因了。前一段时间在生产环境遇到了一个InnoDB报错,这个错误甚至会导致InnoDB Crash:

    InnoDB: Warning: a long semaphore wait:
    –Thread 1222654272 has waited at ./include/btr0btr.ic line 53 for 241.00 seconds the semaphore:
    S-lock on RW-latch at 0x2aaab510b818 created in file buf/buf0buf.c line 680

    沿着这里的线索 buf/buf0buf.c line 680 找到了:

    678 mutex_create(&block->mutex, SYNC_BUF_BLOCK);
    679
    680 rw_lock_create(&block->lock, SYNC_LEVEL_VARYING);
    681 ut_ad(rw_lock_validate(&(block->lock)));

    继续,就开始看rw_lock_create的实现,然后感觉需要看更多基础的一点的内容,这样就有了前面一片文章,继续研究,就有了现在的这篇文章。 (more…)