۱۴۰۴/۰۷/۱۳ Nebular

پرتکرارترین سؤالات، چالش‌ها و راهکارها در SQL Server

🧩 1️⃣ Performance Optimization (بهینه‌سازی کوئری‌ها)

چالش‌ها:

  • Query کند اجرا می‌شود
  • CPU بالا می‌رود
  • IO زیاد است
  • Deadlock و Blocking

راهکارها:

  • بررسی Execution Plan
  • استفاده از Index مناسب (Covering Index, Composite Index)
  • اجتناب از **SELECT ***
  • محدود کردن داده‌ها با WHERE و TOP
  • استفاده از Temp Table برای شکستن queryهای پیچیده
  • جایگزینی Cursor با query set-based
  • استفاده از Stored Procedure Parameter Sniffing Fix (با OPTION (RECOMPILE) یا local variable)

⚙️ 2️⃣ Indexing Strategy (استراتژی ایندکس‌ها)

سؤالات احتمالی:

  • تفاوت Clustered و Non-Clustered Index چیه؟
  • چند تا Clustered Index میشه داشت؟
  • Fragmentation چیه و چطور حلش می‌کنی؟
  • Fill Factor یعنی چی؟

راهکارها:

  • بازسازی ایندکس‌ها: ALTER INDEX ALL ON Orders REBUILD WITH (FILLFACTOR = 90);
  • بررسی ایندکس‌های بی‌استفاده: SELECT * FROM sys.dm_db_index_usage_stats;
  • ساخت ایندکس پوششی (Covering Index): CREATE NONCLUSTERED INDEX IX_Orders_Date_Status ON Orders (OrderDate, OrderStatus) INCLUDE (CustomerID, TotalAmount);

🔐 3️⃣ Security & Permissions

سؤالات:

  • چطور دسترسی کاربران را محدود می‌کنی؟
  • تفاوت db_datareader, db_datawriter, db_owner چیه؟
  • چطور دسترسی به Linked Server را امن می‌کنی؟
  • چطور connection string رو ایمن نگه می‌داری؟

نکات:

  • اصل Least Privilege (حداقل دسترسی ممکن)
  • جدا کردن یوزرهای اپلیکیشن از یوزرهای ادمین
  • استفاده از Stored Procedure به‌جای دادن direct access به جداول

🧠 4️⃣ Concurrency & Locking / Blocking / Deadlock

سؤالات:

  • Deadlock چیه و چطور ازش جلوگیری می‌کنی؟
  • Isolation Levelها رو توضیح بده
  • فرق Read Committed و Snapshot چیه؟

راهکارها:

Deadlock: دو تراکنش منتظر قفل همدیگر → یکی کشته می‌شود

راه‌های جلوگیری: تراکنش کوتاه، ترتیب دسترسی ثابت، Lock Hint، Snapshot

Isolation Level: تعیین نحوه تعامل تراکنش‌ها با هم و Lockها

Read Committed vs Snapshot:

  • Read Committed: داده‌های Commit شده خوانده می‌شوند، ممکن است Non-Repeatable Read و Phantom رخ دهد
  • Snapshot: نسخه ثابت، بدون Lock خواندن، تراکنش‌ها بدون Block و Deadlock می‌توانند بخوانند

🧾 5️⃣ Temp Tables vs Table Variables vs CTE

سؤالات:

  • فرق بین #Temp, @TableVar, و CTE چیه؟
  • کِی از کدوم استفاده می‌کنی؟
ویژگیTemp TableTable VariableCTE
دارای ایندکس؟بلهمحدودخیر
Performance بالا در داده زیاد؟
در حافظه یا دیسک؟دیسک (tempdb)حافظه (ولی ممکنه spill بشه)حافظه (مجازی)
مناسب برایداده زیاد و چندبار استفادهداده کم و موقتیخواندن recursive یا کوتاه

🔄 6️⃣ Transactions & ACID

سؤالات:

  • ACID یعنی چی؟
  • چه زمانی COMMIT و ROLLBACK انجام می‌دی؟
  • اگر بینشون خطا پیش بیاد چی میشه؟

مثال:

BEGIN TRY
  BEGIN TRANSACTION;
  
  UPDATE Accounts SET Balance -= 100 WHERE Id = 1;
  UPDATE Accounts SET Balance += 100 WHERE Id = 2;

  COMMIT;
END TRY
BEGIN CATCH
  ROLLBACK;
  PRINT ERROR_MESSAGE();
END CATCH;

📊 7️⃣ Query Tuning Tools

سؤالات رایج:

  • از چه ابزارهایی برای آنالیز Performance استفاده کردی؟

✅ ابزارهای کلیدی:

  • Execution Plan (Actual / Estimated)
  • SET STATISTICS IO, TIME
  • SQL Profiler / Extended Events
  • DMVs (مثل sys.dm_exec_query_stats یا sys.dm_db_index_usage_stats)
  • Query Store (در SQL Server 2016+)

راهنمایی :

۱. مفهوم DMVs

DMVها (Dynamic Management Views)، نماهای داخلی SQL Server هستند که اطلاعات زمان اجرا و وضعیت سیستم را به ما می‌دهند.
هدفشان: آنالیز Performance، تشخیص مشکلات و بهینه‌سازی کوئری‌ها و ایندکس‌ها است.


۲. انواع DMVs

  1. DMVهای مربوط به Query و Execution
    • sys.dm_exec_query_stats
      • اطلاعات آماری درباره کوئری‌های اجرا شده در کش SQL Server.
      • شامل: تعداد اجرا، زمان متوسط اجرا، CPU مصرف شده، Logical/Physical Reads.
      • مثال:
      SELECT TOP 10 qs.total_worker_time/qs.execution_count AS AvgCPU, qs.execution_count, st.text AS QueryText FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st ORDER BY AvgCPU DESC; با این کوئری می‌توان کندترین یا پرهزینه‌ترین کوئری‌ها را شناسایی کرد.
  2. DMVهای مربوط به Index و Storage
    • sys.dm_db_index_usage_stats
      • نشان می‌دهد هر ایندکس چند بار استفاده شده یا اسکن شده است.
      • مفید برای شناسایی ایندکس‌های بلااستفاده یا کم‌استفاده.
      • مثال:
      SELECT OBJECT_NAME(I.object_id) AS TableName, I.name AS IndexName, S.user_seeks, S.user_scans, S.user_lookups, S.user_updates FROM sys.indexes AS I JOIN sys.dm_db_index_usage_stats AS S ON I.object_id = S.object_id AND I.index_id = S.index_id WHERE OBJECTPROPERTY(I.object_id,'IsUserTable') = 1 ORDER BY S.user_seeks DESC;

۳. کاربردهای اصلی DMVs

کاربردتوضیح
شناسایی کوئری‌های پرهزینهبا sys.dm_exec_query_stats و join با SQL Text
تحلیل استفاده از ایندکس‌هابا sys.dm_db_index_usage_stats
بررسی Waitها و قفل‌هابا sys.dm_os_wait_stats
مانیتورینگ حافظه و کشبا sys.dm_os_buffer_descriptors

۴. نکته مهم

  • DMVها اطلاعات از زمان آخرین ریست سرویس SQL Server دارند، پس تاریخچه کامل ندارند.
  • برای تحلیل طولانی‌مدت، بهتر است داده‌های DMV را در جداول پایگاه داده ذخیره کنید.

💡 جمع‌بندی :

  • DMVs ابزارهایی داخلی و سریع برای مانیتورینگ هستند.
  • sys.dm_exec_query_stats → برای آنالیز کوئری‌ها و عملکرد CPU/IO
  • sys.dm_db_index_usage_stats → برای بررسی استفاده از ایندکس‌ها و بهینه‌سازی آنها
  • ترکیب DMVs با Extended Events یا Query Store بهترین دید Performance را می‌دهد.

💾 8️⃣ Maintenance & Backup

سؤالات:

  • Full / Differential / Log Backup چیه؟
  • چطور restore می‌کنی؟
  • چطور Job برای Backup اتوماتیک می‌سازی؟

☁️ 9️⃣ High Availability & Replication

سؤالات:

  • Mirroring, Log Shipping, Replication, AlwaysOn فرقشون چیه؟
  • در چه شرایطی از هر کدوم استفاده می‌کنی؟

🧮 10️⃣ سایر موضوعات پرتکرار:

موضوعسوال محتملنکته کلیدی
Normalizationچند نوع داره؟از 1NF تا 3NF برای کاهش redundancy
Denormalizationچرا گاهی لازم میشه؟افزایش سرعت queryهای گزارش‌محور
Partitioningبرای چی استفاده میشه؟افزایش کارایی روی داده‌های حجیم
Stored Procedure vs Functionتفاوت اصلی در داشتن transaction و output
Dynamic SQLچطور ایمن بنویسی؟استفاده از sp_executesql با پارامتر

💡 جمع‌بندی برای مصاحبه:
اگر مصاحبه‌گر گفت:

“به عنوان یه SQL Developer چطور Performance سیستم رو بالا می‌بری؟”

تو می‌تونی خلاصه و مطمئن بگی:

با بررسی Execution Plan، اصلاح Indexها، کنترل Parameter Sniffing، کوتاه کردن Transactions، تنظیم Isolation Level مناسب، و استفاده از ابزارهایی مثل Query Store و DMVs.

Accept Cookies
Accept Cookies
[your-shortcode]