WAL چیست؟ بررسی مزایا و نحوه عملکرد Write-Ahead Logging
جنگو دیتابیس جنگو

WAL چیست؟ بررسی مزایا و نحوه عملکرد Write-Ahead Logging

62 بازدید
10 دقیقه مطالعه
2026/07/06

 


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 یکی از مهم‌ترین بخش‌های پایگاه داده هستند.

از آن‌ها برای موارد زیر استفاده می‌شود:

به همین دلیل حذف فایل‌های WAL در PostgreSQL می‌تواند باعث از کار افتادن سیستم بازیابی شود.


WAL در SQL Server

در SQL Server مفهومی به نام Transaction Log وجود دارد.

تمام تغییرات ابتدا در فایل لاگ ثبت می‌شوند و سپس روی فایل‌های اصلی دیتابیس اعمال می‌شوند.

مزایای آن:

در عمل، Transaction Log در SQL Server همان نقش WAL را ایفا می‌کند، اگرچه نام آن متفاوت است.


نتیجه‌گیری

امروزه تقریباً تمام سیستم‌های مدیریت پایگاه داده از نوعی مکانیزم ثبت تغییرات قبل از اعمال روی داده‌های اصلی استفاده می‌کنند. در SQLite این فناوری با نام WAL شناخته می‌شود، در PostgreSQL نیز WAL بخش اصلی معماری پایگاه داده است و در SQL Server، Transaction Log همین وظیفه را بر عهده دارد.

اگر از Django با SQLite استفاده می‌کنید، فعال کردن WAL می‌تواند سرعت، پایداری و امکان پردازش همزمان درخواست‌ها را بهبود دهد. همچنین اگر در آینده به PostgreSQL یا SQL Server مهاجرت کنید، با مفهومی مشابه روبه‌رو خواهید شد؛ بنابراین یادگیری WAL یک دانش کاربردی برای هر توسعه‌دهنده بک‌اند است.

Mobin Hasanghasemi

Mobin Hasanghasemi

Django Developer & Backend Architect