mixi engineer blog

*** 引っ越しました。最新の情報はこちら → https://medium.com/mixi-developers *** ミクシィ・グループで、実際に開発に携わっているエンジニア達が執筆している公式ブログです。様々なサービスの開発や運用を行っていく際に得た技術情報から採用情報まで、有益な情報を幅広く取り扱っています。

データベースの動的デフラグ


PCWeb調mikioTokyo CabinetTC


fragmentationCmalloc/free

tcfragment
使defragmentationWindowsTC

tcdefrag
TC


TCoptimizeMySQLRDBMS使optimizeZFSBtrfs

24365WebRDBMS

TCTokyo TyrantTT24*365


使使使

TC

tcdefragstep
truncate

B+B+

使


TCTTTCB+使
TCHDB *hdb = tchdbnew();
tchdbsetdfunit(hdb, 8);  // 必ずopenの前に呼ぶ
tchdbopen(hdb, "casket", HDBOWRITER | HDBOCREAT);

tchdbsetdfunit8811288B+24

open使TT使
TCADB *adb = tcadbnew();
tcadbopen(adb, "casket.tch#dfunit=8");

Webmixi1113
tchdbdefrag(hdb, 8);

880


1000
  DBサイズ 経過時間
デフォルト 270.58 MB 54.853 秒
dfunit=8 74.797 MB 43.242 秒

30%79%65.33MB

I/OI/O



TC1optimize

Luattexpire.lua
function expire()
   local args = {}
   local cdate = string.format("%d", _time())
   table.insert(args, "addcond\0x\0NUMLE\0" .. cdate)
   table.insert(args, "out")
   local res = _misc("search", args)
   if not res then
      _log("expiration was failed")
   end
   print("rnum=" .. _rnum() .. "  size=" .. _size())
end


ttserver -ext ttexpire.lua -extpc expire 1 "casket.tct#idx=x:dec#bnum=2000000"

50%10%40%1000180
tcrtest table -exp 180 localhost 10000000

13059813016722QPS213MB調tcrmgr optimize localhost12.6102MBDB213


rm -rf casket*
ttserver -ext ttexpire.lua -extpc expire 1 "casket.tct#idx=x:dec#bnum=2000000#dfunit=8"


tcrtest table -exp 180 localhost 10000000

599133MB1.3

Lua30-extpc defrag 1800
function defrag()
   local time = tonumber(os.date("%H%M"))
   if time >= 2230 or time <= 0130 then
      return nil
   end
   if not _misc("defrag") then
      _log("defragmentation was failed", 2)
   end
end


Tokyo Cabinetoptimize使

t.maesakaTC使MySQLBlitzDBoptimizeMyISAM