28.2. ÐÑÑнал пÑедзапиÑи (WAL)
ÐÑÑнал пÑедзапиÑи (WAL) â ÑÑо ÑÑандаÑÑнÑй меÑод обеÑпеÑÐµÐ½Ð¸Ñ ÑелоÑÑноÑÑи даннÑÑ . ÐеÑалÑное опиÑание можно найÑи в болÑÑинÑÑве книг (еÑли не во вÑÐµÑ ) по обÑабоÑке ÑÑанзакÑий. ÐкÑаÑÑе, оÑÐ½Ð¾Ð²Ð½Ð°Ñ Ð¸Ð´ÐµÑ WAL ÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, ÑÑо Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² ÑÐ°Ð¹Ð»Ð°Ñ Ñ Ð´Ð°Ð½Ð½Ñми (где Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑ ÑаблиÑÑ Ð¸ индекÑÑ) Ð´Ð¾Ð»Ð¶Ð½Ñ Ð·Ð°Ð¿Ð¸ÑÑваÑÑÑÑ ÑолÑко поÑле Ñого, как ÑÑи Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±Ñли занеÑÐµÐ½Ñ Ð² жÑÑнал, Ñ. е. поÑле Ñого как запиÑи жÑÑнала, опиÑÑваÑÑие даннÑе изменениÑ, бÑдÑÑ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ñ Ð½Ð° поÑÑоÑнное ÑÑÑÑойÑÑво Ñ ÑанениÑ. ÐÑли ÑледоваÑÑ ÑÑой пÑоÑедÑÑе, Ñо запиÑÑваÑÑ ÑÑÑаниÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð½Ð° диÑк поÑле подÑвеÑÐ¶Ð´ÐµÐ½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑÑанзакÑии Ð½ÐµÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи, поÑÐ¾Ð¼Ñ ÑÑо Ð¼Ñ Ð·Ð½Ð°ÐµÐ¼, ÑÑо еÑли ÑлÑÑиÑÑÑ Ñбой, Ñо Ñ Ð½Ð°Ñ Ð±ÑÐ´ÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð²Ð¾ÑÑÑановиÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¶ÑÑнала: лÑбÑе изменениÑ, коÑоÑÑе не бÑли пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ñ Ðº ÑÑÑаниÑам Ñ Ð´Ð°Ð½Ð½Ñми, могÑÑ Ð±ÑÑÑ Ð²Ð¾ÑÑÐ¾Ð·Ð´Ð°Ð½Ñ Ð¸Ð· запиÑей жÑÑнала. (ÐÑо назÑваеÑÑÑ Ð²Ð¾ÑÑÑановлением Ñ Ð²Ð¾ÑпÑоизведением, или REDO.)
ÐодÑказка
ÐоÑколÑÐºÑ WAL воÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ ÑодеÑжимое Ñайлов Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, жÑÑналиÑÑÐµÐ¼Ð°Ñ ÑÐ°Ð¹Ð»Ð¾Ð²Ð°Ñ ÑиÑÑема не ÑвлÑеÑÑÑ Ð½ÐµÐ¾Ð±Ñ
одимой Ð´Ð»Ñ Ð½Ð°Ð´Ñжного Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ñайлов Ñ Ð´Ð°Ð½Ð½Ñми или Ñайлов WAL. ФакÑиÑеÑки, жÑÑналиÑование Ð¼Ð¾Ð¶ÐµÑ ÑнизиÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ, оÑобенно еÑли жÑÑналиÑование заÑÑавлÑÐµÑ ÑоÑ
ÑанÑÑÑ Ð´Ð°Ð½Ð½Ñе Ñайловой ÑиÑÑÐµÐ¼Ñ Ð½Ð° диÑк. Ð ÑÑаÑÑÑÑ, Ñакое ÑоÑ
Ñанение пÑи жÑÑналиÑовании ÑаÑÑо можно оÑклÑÑиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð°ÑамеÑÑов монÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñайловой ÑиÑÑемÑ, напÑимеÑ, data=writeback Ð´Ð»Ñ Ñайловой ÑиÑÑÐµÐ¼Ñ ext3 в Linux. С дÑÑгой ÑÑоÑонÑ, Ñ Ð¶ÑÑналиÑÑемÑми ÑайловÑми ÑиÑÑемами ÑвелиÑиваеÑÑÑ ÑкоÑоÑÑÑ Ð·Ð°Ð³ÑÑзки поÑле ÑбоÑ.
РезÑлÑÑаÑом иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ WAL ÑвлÑеÑÑÑ Ð·Ð½Ð°ÑиÑелÑное ÑменÑÑение колиÑеÑÑва запÑоÑов запиÑи на диÑк, поÑÐ¾Ð¼Ñ ÑÑо Ð´Ð»Ñ Ð³Ð°ÑанÑии, ÑÑо ÑÑанзакÑÐ¸Ñ Ð¿Ð¾Ð´ÑвеÑждена, в запиÑи на диÑк нÑждаеÑÑÑ ÑолÑко Ñайл жÑÑнала, а не каждÑй Ñайл даннÑÑ
изменÑннÑй в ÑезÑлÑÑаÑе ÑÑанзакÑии. Файл жÑÑнала запиÑÑваеÑÑÑ Ð¿Ð¾ÑледоваÑелÑно и Ñаким обÑазом, заÑÑаÑÑ Ð½Ð° ÑинÑ
ÑонизаÑÐ¸Ñ Ð¶ÑÑнала намного менÑÑе, Ñем заÑÑаÑÑ Ð½Ð° запиÑÑ ÑÑÑÐ°Ð½Ð¸Ñ Ñ Ð´Ð°Ð½Ð½Ñми. ÐÑо оÑобенно ÑпÑаведливо Ð´Ð»Ñ ÑеÑвеÑов, коÑоÑÑе обÑабаÑÑваÑÑ Ð¼Ð½Ð¾Ð³Ð¾ маленÑкиÑ
ÑÑанзакÑий, изменÑÑÑиÑ
ÑазнÑе ÑаÑÑи Ñ
ÑанилиÑа даннÑÑ
. Таким обÑазом, когда ÑеÑÐ²ÐµÑ Ð¾Ð±ÑабаÑÑÐ²Ð°ÐµÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво мелкиÑ
конкÑÑенÑнÑÑ
ÑÑанзакÑий, Ð´Ð»Ñ Ð¿Ð¾Ð´ÑвеÑÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¼Ð½Ð¾Ð³Ð¸Ñ
ÑÑанзакÑий доÑÑаÑоÑно одного вÑзова fsync на Ñайл жÑÑнала.
WAL Ñакже Ð´ÐµÐ»Ð°ÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñм поддеÑÐ¶ÐºÑ ÑезеÑвного копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Â«Ð½Ð° Ñ Ð¾Ð´Ñ» и воÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð° опÑеделÑннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñемени, как опиÑÑваеÑÑÑ Ð² Разделе 24.3. С помоÑÑÑ Ð°ÑÑ Ð¸Ð²Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ WAL поддеÑживаеÑÑÑ Ð²Ð¾Ð·Ð²ÑÐ°Ñ Ðº лÑÐ±Ð¾Ð¼Ñ Ð¼Ð¾Ð¼ÐµÐ½ÑÑ Ð²Ñемени, коÑоÑÑй доÑÑÑпен в даннÑÑ WAL: Ð¼Ñ Ð¿ÑоÑÑо ÑÑÑанавливаем пÑедÑдÑÑÑÑ ÑизиÑеÑкÑÑ ÑезеÑвнÑÑ ÐºÐ¾Ð¿Ð¸Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¸ воÑпÑоизводим жÑÑнал WAL до нÑжного моменÑа вÑемени. Ðолее Ñого, ÑизиÑеÑÐºÐ°Ñ ÑезеÑÐ²Ð½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ Ð½Ðµ должна бÑÑÑ Ð¼Ð³Ð½Ð¾Ð²ÐµÐ½Ð½Ñм Ñнимком ÑоÑÑоÑÐ½Ð¸Ñ Ð±Ð°Ð· даннÑÑ â еÑли она бÑла Ñделана некоÑоÑое вÑÐµÐ¼Ñ Ð½Ð°Ð·Ð°Ð´, воÑпÑоизведение жÑÑнала WAL за ÑÑÐ¾Ñ Ð¿ÐµÑиод иÑпÑÐ°Ð²Ð¸Ñ Ð²Ñе внÑÑÑенние неÑооÑвеÑÑÑвиÑ.