WAL چیست؟
WAL یا Write-Ahead Logging روشی برای مدیریت تراکنشها در پایگاه داده است.
در این روش، قبل از اینکه داده مستقیماً داخل فایل اصلی دیتابیس نوشته شود، ابتدا تغییرات در یک فایل لاگ ثبت میشوند. پس از اطمینان از صحت عملیات، این تغییرات به دیتابیس اصلی منتقل میشوند.
به زبان ساده:
کاربر اطلاعات را ثبت میکند
↓
ابتدا داخل فایل WAL ذخیره میشود
↓
در زمان مناسب به دیتابیس اصلی منتقل میشود
این کار باعث میشود حتی اگر برق سیستم قطع شود یا برنامه کرش کند، اطلاعات قابل بازیابی باشند.
مهمترین مزایای WAL
| مزیت | توضیح |
|---|---|
| سرعت بالاتر | نوشتن ابتدا در فایل لاگ انجام میشود که سریعتر است. |
| امنیت اطلاعات | در صورت قطع برق یا کرش، دادهها از بین نمیروند. |
| خواندن همزمان | کاربران میتوانند هنگام نوشتن اطلاعات، دادهها را مشاهده کنند. |
| کاهش قفل شدن دیتابیس | عملیات خواندن و نوشتن کمتر مزاحم یکدیگر میشوند. |
| مناسب برای پروژههای پرترافیک | عملکرد بهتری نسبت به روشهای قدیمی دارد. |
تفاوت WAL با روش قدیمی
| ویژگی | Journal معمولی | WAL |
|---|---|---|
| سرعت نوشتن | متوسط | زیاد |
| خواندن هنگام نوشتن | خیر | بله |
| تعداد قفلها | زیاد | کم |
| بازیابی اطلاعات | خوب | بسیار خوب |
| مناسب Django | متوسط | عالی |
فایل SHM چیست؟
در برخی دیتابیسها مانند SQLite هنگام فعال بودن WAL، فایل دیگری نیز ایجاد میشود.
db.sqlite3-shm
این فایل دادههای اصلی را نگهداری نمیکند.
بلکه اطلاعات مربوط به هماهنگی پردازشها، وضعیت صفحات حافظه و مدیریت Lockها را ذخیره میکند تا چند پردازش بتوانند همزمان از دیتابیس استفاده کنند.
آیا فقط SQLite از WAL استفاده میکند؟
خیر.
تقریباً تمام دیتابیسهای حرفهای از مکانیزمی مشابه WAL استفاده میکنند.
| دیتابیس | پشتیبانی از WAL |
|---|---|
| SQLite | ✅ بله |
| PostgreSQL | ✅ بله (به صورت پیشفرض) |
| SQL Server | ✅ از Transaction Log استفاده میکند که عملکردی مشابه WAL دارد. |
| MariaDB | ✅ از Redo Log استفاده میکند. |
| MySQL (InnoDB) | ✅ از Redo Log و Undo Log استفاده میکند. |
| Oracle Database | ✅ از Redo Log بهره میبرد. |
WAL در PostgreSQL
در PostgreSQL، فایلهای WAL یکی از مهمترین بخشهای پایگاه داده هستند.
از آنها برای موارد زیر استفاده میشود:
-
بازیابی اطلاعات پس از کرش
-
Replication
-
Backup Point-in-Time
-
High Availability
-
Streaming Replication
به همین دلیل حذف فایلهای WAL در PostgreSQL میتواند باعث از کار افتادن سیستم بازیابی شود.
WAL در SQL Server
در SQL Server مفهومی به نام Transaction Log وجود دارد.
تمام تغییرات ابتدا در فایل لاگ ثبت میشوند و سپس روی فایلهای اصلی دیتابیس اعمال میشوند.
مزایای آن:
-
Rollback تراکنشها
-
Recovery
-
Backup لاگ
-
جلوگیری از خراب شدن دیتابیس
در عمل، Transaction Log در SQL Server همان نقش WAL را ایفا میکند، اگرچه نام آن متفاوت است.
نتیجهگیری
امروزه تقریباً تمام سیستمهای مدیریت پایگاه داده از نوعی مکانیزم ثبت تغییرات قبل از اعمال روی دادههای اصلی استفاده میکنند. در SQLite این فناوری با نام WAL شناخته میشود، در PostgreSQL نیز WAL بخش اصلی معماری پایگاه داده است و در SQL Server، Transaction Log همین وظیفه را بر عهده دارد.
اگر از Django با SQLite استفاده میکنید، فعال کردن WAL میتواند سرعت، پایداری و امکان پردازش همزمان درخواستها را بهبود دهد. همچنین اگر در آینده به PostgreSQL یا SQL Server مهاجرت کنید، با مفهومی مشابه روبهرو خواهید شد؛ بنابراین یادگیری WAL یک دانش کاربردی برای هر توسعهدهنده بکاند است.