خانه/ مبانی پایگاه داده/ معماری SQL Server

SQL Server از داخل چطور کار می‌کند؟

مبتدی ۹ دقیقه مطالعه

در درس قبل یاد گرفتیم SQL زبانی است که با آن از یک DBMS می‌خواهیم کاری برایمان انجام دهد. اما وقتی یک دستور SQL را می‌فرستیم، پشت صحنه دقیقاً چه اتفاقی می‌افتد؟ در این درس، کاپوت SQL Server را باز می‌کنیم و قدم‌به‌قدم مسیر یک پرس‌وجو را دنبال می‌کنیم. فهمیدن این مسیر، درس‌های بعدی مثل تراکنش‌ها و بهینه‌سازی پرس‌وجو را از یک «جادو» به یک فرآیند کاملاً قابل‌درک تبدیل می‌کند.

معماری کلاینت-سرور (Client-Server)

SQL Server از یک الگوی بسیار رایج در دنیای نرم‌افزار پیروی می‌کند به نام کلاینت-سرور:

  • کلاینت (Client) هر چیزی است که یک درخواست می‌فرستد: می‌تواند SQL Server Management Studio باشد، بک‌اند یک اپلیکیشن، یا حتی همین Playground این سایت.
  • سرور (Server) همان موتور SQL Server است که منتظر دریافت درخواست می‌ماند، آن را پردازش می‌کند و نتیجه را برمی‌گرداند.

کلاینت و سرور می‌توانند روی یک سیستم (رایج در یادگیری) یا روی دو ماشین کاملاً جدا و متصل از طریق شبکه (رایج در محیط واقعی شرکت‌ها) اجرا شوند.

قلب ماجرا: موتور پایگاه‌داده (Database Engine)

وقتی می‌گوییم «SQL Server»، در اصل منظورمان سرویسی به نام Database Engine است؛ همان بخشی که داده را ذخیره، پردازش و ایمن نگه می‌دارد. این موتور از سه بخش اصلی تشکیل شده که هر پرس‌وجو، پیش از رسیدن به پاسخ نهایی، از میان هر سه‌ی آن‌ها عبور می‌کند.

کلاینت
SSMS، اپلیکیشن یا مرورگر
لایه پروتکل
دریافت درخواست از طریق TDS
موتور رابطه‌ای
تحلیل و بهینه‌سازی پرس‌وجو
موتور ذخیره‌سازی
خواندن/نوشتن داده روی دیسک

نتیجه هم دقیقاً از همین مسیر، برعکس، به کلاینت برمی‌گردد.

۱. لایه پروتکل (Protocol Layer)

وقتی کلاینت به SQL Server وصل می‌شود، این اتصال از طریق یک پروتکل ارتباطی به نام TDS (مخفف Tabular Data Stream) و معمولاً روی پورت 1433 برقرار می‌شود. این لایه کاری به معنای دستور SQL ندارد؛ فقط مسئول این است که پیام‌ها به‌درستی بین کلاینت و سرور رد و بدل شوند — دقیقاً مثل پاکتِ نامه که محتوایش برایش مهم نیست، فقط مطمئن می‌شود نامه به مقصد درست می‌رسد.

۲. موتور رابطه‌ای (Relational Engine)

این‌جا جایی است که هوشمندی اصلی SQL Server اتفاق می‌افتد. وقتی پرس‌وجوی تو وارد این لایه می‌شود، سه اتفاق به‌ترتیب می‌افتد:

  • تجزیه (Parsing): بررسی می‌شود که دستور از نظر نگارشی درست نوشته شده — مثلاً کلمه‌ی SELECT اشتباه تایپ نشده باشد.
  • اعتبارسنجی (Binding): بررسی می‌شود که جدول‌ها و ستون‌هایی که در پرس‌وجو نام برده شده، واقعاً وجود دارند.
  • بهینه‌سازی (Query Optimization): بخش بسیار مهمی به نام بهینه‌ساز پرس‌وجو (Query Optimizer) از میان چند راه ممکن برای اجرای پرس‌وجو، سریع‌ترین راه را انتخاب می‌کند و آن را به‌صورت یک نقشه‌ی اجرا (Execution Plan) در می‌آورد.
همین بهینه‌ساز پرس‌وجو دلیل اصلی اهمیت مبحث ایندکس‌گذاری در فصل ۱۰ است: هرچه اطلاعات بیشتری (مثل ایندکس مناسب) در اختیار بهینه‌ساز باشد، نقشه‌ی اجرای بهتری انتخاب می‌کند و پرس‌وجو سریع‌تر اجرا می‌شود.

۳. موتور ذخیره‌سازی (Storage Engine)

پس از آماده شدن نقشه‌ی اجرا، نوبت به موتور ذخیره‌سازی می‌رسد تا واقعاً داده را از جایی که فیزیکی ذخیره شده بخواند یا در آن بنویسد. دو مفهوم کلیدی این بخش عبارت‌اند از:

  • بافر پول (Buffer Pool): بخشی از حافظه‌ی RAM که صفحات پرکاربرد داده را نگه می‌دارد تا لازم نباشد هر بار به دیسک (که کند‌تر است) مراجعه شود. همین کش کردن هوشمند، یکی از دلایل اصلی سرعت بالای SQL Server است.
  • لاگ تراکنش (Transaction Log): پیش از این‌که هر تغییری نهایی شود، ابتدا در یک فایل لاگ ثبت می‌شود. این یعنی حتی اگر سرور وسط یک عملیات از کار بیفتد، هیچ داده‌ای ناقص یا گم نمی‌شود.
لاگ تراکنش دقیقاً همان چیزی است که در فصل ۹ به‌عنوان بخشی از ویژگی Durability در اصول ACID با آن آشنا می‌شویم.

Instance چیست و پایگاه‌داده‌های سیستمی کدام‌اند؟

یک Instance یعنی یک نسخه‌ی در حال اجرا از SQL Server — دقیقاً مثل یک برنامه‌ی باز روی سیستم. هر Instance می‌تواند میزبان چندین پایگاه‌داده‌ی مستقل باشد. به‌محض نصب SQL Server، چهار پایگاه‌داده‌ی سیستمی به‌طور خودکار ساخته می‌شوند:

ناموظیفه
masterنگه‌داری اطلاعات کل Instance: لیست پایگاه‌داده‌ها، تنظیمات، لاگین‌ها
modelقالب اولیه‌ای که هر پایگاه‌داده‌ی جدید از روی آن ساخته می‌شود
msdbمدیریت کارهای زمان‌بندی‌شده، هشدارها و پشتیبان‌گیری‌ها
tempdbفضای کاری موقت؛ با هر بار راه‌اندازی مجدد سرور از نو ساخته می‌شود

در کنار این‌ها، پایگاه‌داده‌هایی که خودت می‌سازی (مثل همان‌هایی که در فصل بعد باهاشان کار می‌کنیم) «پایگاه‌داده‌های کاربر» نامیده می‌شوند.

چطور با SQL Server صحبت کنیم؟

در دنیای واقعی، معمولاً به یکی از این دو روش با SQL Server ارتباط برقرار می‌شود:

  • SQL Server Management Studio (SSMS): ابزار رایگان و رسمی مایکروسافت برای اتصال، نوشتن پرس‌وجو و مدیریت پایگاه‌داده — پرکاربردترین ابزار در محیط کار.
  • اتصال برنامه‌نویسی‌شده: اپلیکیشن‌های واقعی (مثل همان فروشگاه اینترنتی مثال درس قبل) به‌صورت خودکار و از طریق درایورهایی مثل ADO.NET یا ODBC به SQL Server وصل می‌شوند و مدام پرس‌وجو می‌فرستند — بدون این‌که کاربر نهایی هیچ‌وقت رابط SQL Server را ببیند.
نکته: Playground این سایت، برای این‌که کاملاً رایگان و بدون نیاز به نصب باقی بماند، از موتور سبک‌تری به‌نام SQLite استفاده می‌کند که معماری ساده‌تری دارد (مثلاً مفهوم Instance یا tempdb ندارد). اما مفاهیمی که همین‌جا یاد می‌گیری — پردازش پرس‌وجو، بهینه‌سازی، تراکنش‌ها — به‌طور مفهومی در SQL Server واقعی هم دقیقاً همین‌طور کار می‌کنند.

جمع‌بندی این درس

  • SQL Server از الگوی کلاینت-سرور پیروی می‌کند.
  • هر پرس‌وجو از سه لایه عبور می‌کند: لایه پروتکل، موتور رابطه‌ای (تحلیل و بهینه‌سازی) و موتور ذخیره‌سازی (خواندن/نوشتن واقعی داده).
  • هر Instance چهار پایگاه‌داده‌ی سیستمی دارد: master، model، msdb و tempdb.
  • در محیط واقعی، با SQL Server از طریق SSMS یا اتصال برنامه‌نویسی‌شده کار می‌کنیم.

در درس بعدی، وارد مبحث خود پایگاه‌داده‌ها می‌شویم: چطور یک پایگاه‌داده می‌سازیم و داخلش دقیقاً چه چیزهایی نگه‌داری می‌شود.