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 است؛ همان بخشی که داده را ذخیره، پردازش و ایمن نگه میدارد. این موتور از سه بخش اصلی تشکیل شده که هر پرسوجو، پیش از رسیدن به پاسخ نهایی، از میان هر سهی آنها عبور میکند.
نتیجه هم دقیقاً از همین مسیر، برعکس، به کلاینت برمیگردد.
۱. لایه پروتکل (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): پیش از اینکه هر تغییری نهایی شود، ابتدا در یک فایل لاگ ثبت میشود. این یعنی حتی اگر سرور وسط یک عملیات از کار بیفتد، هیچ دادهای ناقص یا گم نمیشود.
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 را ببیند.
جمعبندی این درس
- SQL Server از الگوی کلاینت-سرور پیروی میکند.
- هر پرسوجو از سه لایه عبور میکند: لایه پروتکل، موتور رابطهای (تحلیل و بهینهسازی) و موتور ذخیرهسازی (خواندن/نوشتن واقعی داده).
- هر Instance چهار پایگاهدادهی سیستمی دارد:
master،model،msdbوtempdb. - در محیط واقعی، با SQL Server از طریق SSMS یا اتصال برنامهنویسیشده کار میکنیم.
در درس بعدی، وارد مبحث خود پایگاهدادهها میشویم: چطور یک پایگاهداده میسازیم و داخلش دقیقاً چه چیزهایی نگهداری میشود.