uz
Feedback
SQL Server

SQL Server

Kanalga Telegram’da o‘tish

حمید رضا صادقیان 🔴طراح‌ومشاوربانک های اطلاعاتیSQLSERVER ⚫️مدرس دوره های آموزشیDatabase ارتباط با من: @Hamidreza_Sadeghian گروه تبادل نظر: https://t.me/+uIc1qhv58gU0NWQ0

Ko'proq ko'rsatish
3 953
Obunachilar
Ma'lumot yo'q24 soatlar
-47 kunlar
-1530 kunlar
Obunachilarni jalb qilish
Aprel '26
Aprel '260
0 kanalda
Mart '26
+8
0 kanalda
Get PRO
Fevral '26
+23
0 kanalda
Get PRO
Yanvar '26
+17
0 kanalda
Get PRO
Dekabr '25
+38
0 kanalda
Get PRO
Noyabr '25
+34
0 kanalda
Get PRO
Oktabr '25
+30
0 kanalda
Get PRO
Sentabr '25
+85
9 kanalda
Get PRO
Avgust '25
+74
9 kanalda
Get PRO
Iyul '25
+32
0 kanalda
Get PRO
Iyun '25
+23
0 kanalda
Get PRO
May '25
+19
0 kanalda
Get PRO
Aprel '25
+31
0 kanalda
Get PRO
Mart '25
+35
0 kanalda
Get PRO
Fevral '25
+39
0 kanalda
Get PRO
Yanvar '25
+45
0 kanalda
Get PRO
Dekabr '24
+55
1 kanalda
Get PRO
Noyabr '24
+52
0 kanalda
Get PRO
Oktabr '24
+51
0 kanalda
Get PRO
Sentabr '24
+56
0 kanalda
Get PRO
Avgust '24
+78
0 kanalda
Get PRO
Iyul '24
+56
0 kanalda
Get PRO
Iyun '24
+88
9 kanalda
Get PRO
May '24
+71
0 kanalda
Get PRO
Aprel '24
+69
0 kanalda
Get PRO
Mart '24
+63
0 kanalda
Get PRO
Fevral '24
+90
0 kanalda
Get PRO
Yanvar '24
+84
0 kanalda
Get PRO
Dekabr '23
+101
6 kanalda
Get PRO
Noyabr '23
+58
0 kanalda
Get PRO
Oktabr '23
+41
0 kanalda
Get PRO
Sentabr '23
+36
0 kanalda
Get PRO
Avgust '23
+35
0 kanalda
Get PRO
Iyul '23
+33
0 kanalda
Get PRO
Iyun '23
+60
0 kanalda
Get PRO
May '23
+26
0 kanalda
Get PRO
Aprel '23
+29
0 kanalda
Get PRO
Mart '23
+37
0 kanalda
Get PRO
Fevral '23
+43
0 kanalda
Get PRO
Yanvar '23
+39
0 kanalda
Get PRO
Dekabr '22
+36
0 kanalda
Get PRO
Noyabr '22
+41
0 kanalda
Get PRO
Oktabr '22
+51
0 kanalda
Get PRO
Sentabr '22
+40
0 kanalda
Get PRO
Avgust '22
+109
0 kanalda
Get PRO
Iyul '22
+72
0 kanalda
Get PRO
Iyun '22
+71
0 kanalda
Get PRO
May '22
+97
0 kanalda
Get PRO
Aprel '22
+61
0 kanalda
Get PRO
Mart '22
+71
0 kanalda
Get PRO
Fevral '22
+44
0 kanalda
Get PRO
Yanvar '22
+78
0 kanalda
Get PRO
Dekabr '21
+64
0 kanalda
Get PRO
Noyabr '21
+67
0 kanalda
Get PRO
Oktabr '21
+78
0 kanalda
Get PRO
Sentabr '21
+63
0 kanalda
Get PRO
Avgust '21
+169
0 kanalda
Get PRO
Iyul '21
+54
0 kanalda
Get PRO
Iyun '21
+58
0 kanalda
Get PRO
May '21
+37
0 kanalda
Get PRO
Aprel '21
+107
0 kanalda
Get PRO
Mart '21
+67
0 kanalda
Get PRO
Fevral '21
+142
0 kanalda
Get PRO
Yanvar '21
+96
0 kanalda
Get PRO
Dekabr '20
+3 244
0 kanalda
Sana
Obunachilarni jalb qilish
Esdaliklar
Kanallar
02 Aprel0
01 Aprel0
Kanal postlari
سلام دوستان 🚨 تا حالا شده بری Shrink File و با خودت بگی: «اینا رو با یه SELECT نمیشه دید؟!» 🤔 خبر خوب برای DBAها و Backend Engineerها 🎉 بله… میشه! و حتی تمیزتر، سریع‌تر و قابل اتوماسیون 😎 🧠 مسئله چیه؟ تو SQL Server وقتی میری: بخش Shrink Database یا Shrink File برای هر فایل اینا رو می‌بینی: Total Size Used Space Free Space اما این اطلاعات: ❌ اسکریپت‌پذیر نیست ❌ تو مانیتورینگ نمیاد ❌ تو گزارش DBA جایی نداره 🎯 سناریوی خیلی واقعی (احتمالاً الان داری باهاش دست‌وپنجه نرم می‌کنی 😅) فرض کن: روی یک سیستم تستی / Staging کار می‌کنی می‌خوای روی یک دیتابیس خاص تغییرات سنگین بدی فضا کم آوردی 😬 اون دیتابیس هم ۱۰ تا Data File مختلف + یکی دوتا Log داره حالا سوال مهم اینه 👇 👉 از کدوم فایل واقعاً می‌تونم فضا آزاد کنم؟ 👉 کدوم فایل عملاً پره و Shrink روش جواب نمی‌ده؟ اینجاست که Shrink UI دیگه کافی نیست… و یه SELECT حسابی نجاتت می‌ده 😏 ✅ راه‌حل حرفه‌ای با کوئری زیر، دقیقاً همون چیزی که UI نشون می‌ده رو می‌گیری برای: Data File 🗂 Log File 🧾
SELECT
 df.name,
 df.type_desc,
 df.physical_name,
 df.size / 128.0 AS TotalSizeMB,
 CASE 
 WHEN df.type = 1 
 THEN ls.used_log_space_in_bytes / 1024 / 1024 
 ELSE FILEPROPERTY(df.name, 'SpaceUsed') / 128.0
 END AS UsedSpaceMB,
 CASE 
 WHEN df.type = 1 
 THEN (df.size / 128.0) - (ls.used_log_space_in_bytes / 1024 / 1024)
 ELSE (df.size - FILEPROPERTY(df.name, 'SpaceUsed')) / 128.0
 END AS FreeSpaceMB
FROM sys.database_files df
OUTER APPLY sys.dm_db_log_space_usage ls;
💎 این کوئری دقیقاً کجاها می‌درخشه؟ ✨ وقتی روی Test / QA / Staging فضا کم آوردی ✨ وقتی دیتابیس چندین فایل داره و تصمیم‌گیری سخته ✨ برای اینکه بدونی کدوم فایل ارزش Shrink داره ✨ قبل از Extend کردن دیسک (که همیشه هم در دسترس نیست 😐) ✨ توی Monitoring Dashboard ✨ برای Capacity Planning واقعی، نه حدسی 👥 این کد به درد کی می‌خوره؟ 👨‍💻 DBAها (Junior تا Senior) 👨‍💻 Backend Engineerهایی که SQL Server دارن 🏢 تیم‌های DevOps و Infra 📊 برای داشبوردهای Monitoring ⚠️ یادآوری دوستانه DBA‌طور 🔴 Free Space ≠ Space قابل Shrink 🔴و Shrink مُسکنه، نه درمان 🔴 اول علت رشد فایل رو بفهم، بعد تصمیم بگیر hashtag#SQLServer hashtag#DBA hashtag#Monitoring hashtag#CapacityPlanning hashtag#TSQL hashtag#DevOps hashtag#DataEngineering 🚀

2
تا حالا Running Total تو SQL Server نوشتی و با خیال راحت رد شدی؟ 😌 📌 معمولاً برای Running Total یه چیزی شبیه این می‌نویسیم: SUM(TotalDue) OVER ( PARTITION BY CustomerID ORDER BY OrderDate ) همه‌چیز هم ظاهراً درسته… اما دقیقاً همین‌جا مشکل شروع میشه 😐 🔍 مشکل کجاست؟ وقتی داخل OVER فقط ORDER BY می‌نویسیم و چیز دیگه‌ای مشخص نمی‌کنیم، SQL Server به‌صورت پیش‌فرض از این استفاده می‌کنه 👇 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW و این یعنی چی؟ 🤔 یعنی اگر تو ستون ORDER BY (مثلاً OrderDate) مقدار تکراری وجود داشته باشه: SQL Server تمام ردیف‌هایی که تاریخ یکسان دارن رو «یک ردیف منطقی» در نظر می‌گیره Running Total برای همه اون‌ها با هم محاسبه میشه نتیجه؟ ➕ جمع یه‌هو می‌پره 😵‍💫 چیزی که حس می‌کنیم غلطه، ولی در واقع «غیرمنتظره» است ❗️ نکته مهم: SQL Server اشتباه نکرده ما ناخواسته رفتار RANGE رو فعال کردیم 🚀 راه‌حل درست و حرفه‌ای: اگه Running Total واقعی می‌خوای، یعنی ردیف‌به‌ردیف و بدون پرش، باید صریح بنویسی: SUM(TotalDue) OVER ( PARTITION BY CustomerID ORDER BY OrderDate ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) یا حتی کوتاه‌تر: ROWS UNBOUNDED PRECEDING ✔️ محاسبه دقیق ✔️ بدون رفتار عجیب ✔️ Performance خیلی بهتر (In-Memory به‌جای TempDB) 🧠 جمع‌بندی Defaultها همیشه دوست ما نیستن RANGE فقط وقتی خوبه که عمداً بخوای Tieها یکی حساب بشن برای ۹۹٪ سناریوهای Running Total → ROWS رو همیشه صریح بنویس یه خط کداضافه ، ولی کلی تفاوت تو نتیجه و Performance 🔥 #SQLServer #TSQL #DBA #Performance #WindowFunctions #RunningTotal #DatabaseTips
841
3
سلام دوستان 💼🌳 چالش همیشگی ما با درخت‌های سلسله‌مراتبی در SQL! همیشه وقتی با ساختار درختی کار می‌کنیم، معمولاً از ریشه شروع می‌کنیم و تا برگ‌ها می‌رویم. اما یه سؤال جالب پیش میاد: ❓ فرض کنید شما یه نقطه وسط درخت دارید و می‌خواید بفهمید این رکورد به کدوم ریشه یا مدیر اصلی وصل می‌شه؟ برای مثال: مشخصات یک کارمند را دارید و می‌خواید ببینید در چارت سازمانی، مسیرش تا مدیر ارشد کجاست. اینجاست که باید برعکس فکر کنید: از پایین به بالا حرکت کنید، نه از بالا به پایین. و نکته جالب: در کدنویسی و SQL، مدل بازگشتی فرقی نمی‌کنه، فقط جهت پیمایش عوض می‌شه 😎 🔹 ساختار جدول عمومی (می‌تونید تست کنید) CREATE TABLE Table1 ( Id UNIQUEIDENTIFIER PRIMARY KEY, Name NVARCHAR(100), ParentId UNIQUEIDENTIFIER NULL ); Id → شناسه رکورد ParentId → شناسه والد (NULL یعنی ریشه) Name → نام رکورد 🔹 کوئری CTE برای پیدا کردن مسیر تا ریشه DECLARE @InputId UNIQUEIDENTIFIER = 'YOUR_RECORD_ID_HERE'; WITH ReverseCTE AS ( -- شروع از رکورد مورد نظر SELECT Id, ParentId, Name, 0 AS Level FROM Table1 WHERE Id = @InputId UNION ALL -- پیمایش به سمت والد SELECT p.Id, p.ParentId, p.Name, c.Level + 1 FROM Table1 p INNER JOIN ReverseCTE c ON c.ParentId = p.Id WHERE c.ParentId IS NOT NULL ) SELECT * FROM ReverseCTE ORDER BY Level DESC; -- ریشه بالای خروجی اگر فقط ریشه براتون مهمه: SELECT TOP 1 Id, Name FROM ReverseCTE ORDER BY Level DESC; 🔹 نکات حرفه‌ای 💡 برای هر عمق درختی جواب می‌ده مناسب گزارش‌ها، داشبوردها و تحلیل سلسله‌مراتبی می‌تونید مسیر رو به صورت رشته /Root/Parent/Child/... هم بسازید تا راحت نمایش بدید 🧠 تجربه شخصی: وقتی شما از پایین شروع می‌کنید و مسیر تا ریشه رو پیدا می‌کنید، دید کامل‌تری نسبت به سلسله‌مراتب پیدا می‌کنید. مثل اینه که بفهمید یک کارمند دقیقاً تحت چه مدیریتی و چه شاخه‌ای از سازمان قرار گرفته.
1 027
4
سلام دوستان 💼🌳 چالش همیشگی ما با درخت‌های سلسله‌مراتبی در SQL! همیشه وقتی با ساختار درختی کار می‌کنیم، معمولاً از ریشه شروع می‌کنیم و تا برگ‌ها می‌رویم. اما یه سؤال جالب پیش میاد: ❓ فرض کنید شما یه نقطه وسط درخت دارید و می‌خواید بفهمید این رکورد به کدوم ریشه یا مدیر اصلی وصل می‌شه؟ برای مثال: مشخصات یک کارمند را دارید و می‌خواید ببینید در چارت سازمانی، مسیرش تا مدیر ارشد کجاست. اینجاست که باید برعکس فکر کنید: از پایین به بالا حرکت کنید، نه از بالا به پایین. و نکته جالب: در کدنویسی و SQL، مدل بازگشتی فرقی نمی‌کنه، فقط جهت پیمایش عوض می‌شه 😎 🔹 ساختار جدول عمومی (می‌تونید تست کنید) CREATE TABLE Table1 ( Id UNIQUEIDENTIFIER PRIMARY KEY, Name NVARCHAR(100), ParentId UNIQUEIDENTIFIER NULL ); Id → شناسه رکورد ParentId → شناسه والد (NULL یعنی ریشه) Name → نام رکورد 🔹 کوئری CTE برای پیدا کردن مسیر تا ریشه DECLARE @InputId UNIQUEIDENTIFIER = 'YOUR_RECORD_ID_HERE'; WITH ReverseCTE AS ( -- شروع از رکورد مورد نظر SELECT Id, ParentId, Name, 0 AS Level FROM Table1 WHERE Id = @InputId UNION ALL -- پیمایش به سمت والد SELECT p.Id, p.ParentId, p.Name, c.Level + 1 FROM Table1 p INNER JOIN ReverseCTE c ON c.ParentId = p.Id WHERE c.ParentId IS NOT NULL ) SELECT * FROM ReverseCTE ORDER BY Level DESC; -- ریشه بالای خروجی اگر فقط ریشه براتون مهمه: SELECT TOP 1 Id, Name FROM ReverseCTE ORDER BY Level DESC; 🔹 نکات حرفه‌ای 💡 برای هر عمق درختی جواب می‌ده مناسب گزارش‌ها، داشبوردها و تحلیل سلسله‌مراتبی می‌تونید مسیر رو به صورت رشته /Root/Parent/Child/... هم بسازید تا راحت نمایش بدید 🧠 تجربه شخصی: وقتی شما از پایین شروع می‌کنید و مسیر تا ریشه رو پیدا می‌کنید، دید کامل‌تری نسبت به سلسله‌مراتب پیدا می‌کنید. مثل اینه که بفهمید یک کارمند دقیقاً تحت چه مدیریتی و چه شاخه‌ای از سازمان قرار گرفته.
2
5
سلام دوستان 📉 Shrink در SQL Server به روایت یک فضای کار اشتراکی! فرض کن یکی میره یه فضای کار اشتراکی 🏢 اوایل کارش کوچیکه، یه میز اشتراکی می‌گیره. کم‌کم کارش می‌گیره 📈، میگه «نه، من یه اتاق می‌خوام» 🚪 اتاق رو می‌گیره، کارش راه می‌افته، همه چی خوبه 😌 فرداش چی؟ میگه «نه بابا، الان اتاق زیادیه» اتاق رو پس میده، برمی‌گرده میز اشتراکی 😐 عصر دوباره کار زیاد میشه: «بچه‌ها اتاق بدین!» دوباره اتاق می‌گیره… پس میده… می‌گیره… پس میده… 🤦‍♂️ حالا صاحب فضای کار اشتراکی کلافه نشده؟ دیوارها جابه‌جا نمی‌شن؟ نظم فضا به هم نمی‌ریزه؟ 😵 📌 Shrink توی SQL Server دقیقاً همینه! دیتابیس رشد می‌کنه 📊 شما Shrink می‌کنی چون «فضا خالیه» دوباره دیتا میاد، دوباره رشد می‌کنه دوباره Shrink نتیجه؟ Fragmentation شدید 🧩 فشار بی‌خودی به IO 💥 بدتر شدن Performance 🐌 📢 Shrink یعنی پس گرفتن فضا، نه مدیریت فضا! Shrink برای شرایط خاصه: بعد از حذف دائمی حجم عظیمی از دیتا وقتی مطمئنی دیگه به اون فضا نیاز نداری نه برای اینکه: ❌ هر هفته دیسک خالی ببینی ❌ یا وجدان DBA‌ت آروم بشه 😄 و این مساله هم برای فایل LDF صدق می کنه هم MDF. بارها توی همه Job ها من Job برای Shrink دیدم و ایجاد Fragmentation بر روی LDF ها. 🎯 نتیجه: به جای این همه «اتاق پس بده، اتاق بگیر» یه فضای مناسب بگیر، درست استفاده کن، و بگذار دیتابیس با آرامش رشد کنه و برای کنترل LDF هم تهیه بکاپ منظم از Log ها به این مساله به شدت کمک می کنه.🧘‍♂️ hashtag#SQLServer hashtag#DBA hashtag#Shrink hashtag#Performance hashtag#DatabaseLife hashtag#طنز_فنی 😄
1 284
6
سلام دوستان 🔍 یک چالش جالب در SQL Server که می‌تونست یک مجموعه رو زمین‌گیر کنه! چند وقت پیش در یکی از مجموعه‌ها با یک مشکل عجیب مواجه بودن 👀 سیستم از یک تعداد کاربر مشخص به بعد خطا می‌داد و اجازه نمی‌داد اتصال جدیدی به دیتابیس برقرار بشه. 🔎 بعد از دیدن خطا، اولین چیزی که به ذهنم رسید این بود: احتمالاً تنظیمات user connections دستکاری شده. مشکل اینجا بود که حتی اتصال عادی هم به دیتابیس برقرار نمی‌شد! با کلی داستان و از طریق sqlcmd تونستم مستقیم به Engine وصل بشم 💪 📌 با بررسی تنظیمات: 'sp_configure 'user connections مشخص شد مقدار روی 100 ست شده 😐 🔧 راه‌حل ساده ولی حیاتی بود: مقدار user connections رو روی 0 گذاشتم عدد 0 یعنی: 👉 SQL Server خودش مدیریت می‌کنه (تا حدود 32767 اتصال همزمان) بعد از اعمال تغییر، مجبور شدیم یک بار سرویس SQL Server رو ریست کنیم 🔄 و… مشکل به‌طور کامل حل شد ✅ ✨ نکته جالب‌تر؟ کاربران می‌گفتن حتی سرعت سیستم هم بهتر شده! احتمالاً سیستم مدام سعی می‌کرد اتصال بگیره، خطا می‌خورد و منتظر می‌موند تا دوباره تلاش کنه ⏳ 🧠 جمع‌بندی مهم: هر عددی که در SQL Server می‌بینید، معمولاً پشتش یک منطق و سناریو وجود داره. این تنظیمات رو: ❌ با حدس ❌ با سلیقه ❌ یا «ببینیم با کدوم عدد حال می‌کنیم» نباید تغییر داد! ⚠️ یک عدد اشتباه، خیلی راحت می‌تونه کل یک شرکت رو دچار اختلال کنه. کمی دقت بیشتر در این جزئیات، هزینه‌های خیلی بزرگی رو کم می‌کنه. #SQLServer #DBA #Performance #Troubleshooting #Database #Production #Experience
1 259
7
سلام دوستان. 🔧 بهینه‌سازی حذف 17 میلیون رکورد در SQL Server 🚀 قرار بود از یک جدول، حدود 17 میلیون رکورد حذف بشه. منطق اولیه به این صورت بود که: 🔹 داخل یک حلقه، با یک SELECT 🔹 هر بار 20,000 رکورد در یک Local Variable ریخته می‌شد 🔹 و سپس عملیات حذف انجام می‌گرفت ⏳ این روش به‌شدت کند بود و فرآیند حذف چندین ساعت زمان می‌برد. 💡 راهکاری که پیاده‌سازی کردم: ✅ منطق را به‌طور کامل بازطراحی کردم: 1️⃣ دستور SELECT را از داخل حلقه خارج کردم 2️⃣ یک Temporary Table ساختم 3️⃣ تمام ID‌های موردنظر را یک‌جا داخل آن INSERT کردم 4️⃣ روی جدول Temp یک Index مناسب ایجاد کردم ⚡️ 5️⃣ در حلقه، هر بار فقط 20,000 رکورد: از جداول اصلی حذف می‌شد و همان 20,000 رکورد از جدول Temp هم پاک می‌شد 🔁 کل فرآیند در قالب یک Transaction کنترل‌شده انجام شد 📌 به‌طوری که بعد از هر 20,000 رکورد COMMIT می‌شد تا: رشد Transaction Log کنترل بشه. با توجه به Auto Backup‌های مداوم، فایل لاگ من رشد نمیکرد که باعث ترکیدن سیستم بشه. 🎯 نتیجه نهایی: 🔥 حذف کامل 17,000,000 رکورد فقط در 56 دقیقه 📉 کاهش چشمگیر زمان اجرا 📉 کنترل مصرف لاگ 📈 افزایش پایداری سیستم در زمان عملیات ⚠️ نکته مهم درباره علت کندی اولیه: روی جدول، Cascade Delete فعال بود و به دلیل محدودیت‌های سیستمی امکان تغییر آن وجود نداشت بنابراین بهینه‌سازی باید کاملاً در سطح منطق اجرا و معماری حذف داده انجام می‌شد، نه ساختار دیتابیس.
1 511
8
امروز برای بررسی یک دیتابیس از یک نرم‌افزار در کشور دوست و همسایه 🌍 (همون سرزمین فرصت‌ها و محل تحقق آمال و آرزوهای همه ما 😅✈️) وصل شدم. حالا اینکه مدیریت درست‌وحسابی دیتابیس نداشتن، بماند… 🤦‍♂️ اما اصل ماجرا 👇 رفتم سراغ Jobهای بکاپ. دیدم دوست عزیزمون رفته پنل زمان‌بندی رو باز کرده، چون برای هر روز هفته یه چک‌باکس گذاشته بودن، ایشون هم فکر کرده باید برای هر روز یه Job جدید بسازه! 😂😂 یعنی ۷ تا جاب بکاپ، یکی برای شنبه، یکی دوشنبه… انگار بکاپ گرفتن نذریه و باید روز به روز پخش بشه 😄🍛 بابا یه دونه ماوس برداری یه دابل‌کلیک بزنی ببینی شاید بشه چندتا روز رو با هم انتخاب کرد… ولی خب… ظاهراً ماوسش همون روز مرخصی بوده 🐭💤 راستش چیزهای عجیب زیاد دیدم، اما این یکی واقعاً هنر خاصی می‌خواست 🎨😆 شما تا حالا به همچین شاهکارهای مهندسی برخوردین؟ تجربه‌های باحال و عجیب‌غریب‌تون رو بگین بخندیم 😂👇
1 411
9
گاهی وقتا برای فهمیدن پشت‌صحنه‌ی واقعی SQL Server باید یه ذره چراغ‌قوه‌ی مخفی روشن کنیم 😎🔦 یکی از چیزهایی که همیشه کمکم کرده بفهمم دقیقاً اون زیر چه خبره، همین دستور معروفه: dbcc traceon(3004,3604,-1) این دستور باعث میشه جزییات کامل عملیات Backup و Restore رو ببینی؛ جزییاتی که SQL Server معمولاً ساکت و بی‌صدا انجامشون میده ولی ما می‌خوایم بدونیم دقیقاً در حال رخ دادن چیه ⚙️👀 نکته‌ی جالبش اینه که تو این جزییات دقیقاً مشخص می‌کنه: ✔️بکاپ یا ریستور با چه پارامترهایی داره انجام میشه، ✔️کدوم مرحله بیشترین زمان رو می‌بلعه، ✔️و چطور می‌تونی کل فرآیند رو بهینه‌تر کنی ⏱️🚀 وقتی فعالش می‌کنی، انگار وارد اتاق کنترل موتور SQL Server شدی و داری قدم‌به‌قدم همه‌چیز رو لایو نگاه می‌کنی 🔍💡 و اما نکته‌ی مهم برای کسایی که تازه با این Trace Flagها آشنا می‌شن: ✔️Trace Flag 3004: مسئول نوشتن لاگ عملیات Backup/Restore هست. ✔️Trace Flag 3604: به SQL Server میگه همین لاگ‌ها رو مستقیم داخل نتیجه‌ی همون کوئری نشون بده. یعنی دقیقاً همان لحظه همونجا می‌بینی چه اتفاقی داره میفته 😍📜 برای من این چیزا فقط یه دستور نیستن؛ کلیدهایی هستن برای اینکه رفتار دیتابیس رو بفهمم، تحلیل کنم و دقیق‌تر از همیشه بهینه‌سازی انجام بدم. #SQLServer #DBA #TraceFlag #BackupRestore #PerformanceTuning #DatabaseInternals #Monitoring #MicrosoftSQLServer #DataEngineering
1 747
10
سلام دوستان عزیز 🔍 SET FMTONLY دقیقاً چیه و چرا دیگه بهتره ازش استفاده نکنیم؟ یه نکته فنی که این چند روز دوباره باهاش برخورد کردم و گفتم اینجا هم بگم: SET FMTONLY ON خیلی‌ها هنوز توی پروژه‌ها استفاده می‌کنن، در حالی که واقعاً دیگه وقتشه بذاریمش کنار 😄 🧪 SET FMTONLY ON یعنی چی؟ وقتی این گزینه رو فعال می‌کنی: SET FMTONLY ON; SELECT * FROM Sales.Orders; SQL Server اصلاً کوئری رو اجرا نمی‌کنه! فقط ساختار خروجی رو میده: - اسم ستون‌ها - نوع داده‌ها - نه دیتا می‌خونه - نه لاجیک اجرا می‌کنه - نه Temp Table می‌سازه - نه حتی Cross DB Query اجرا میشه! برای همون دوران ADO و ODBC قدیم ساخته شده بود. ❌ مشکلش چیه؟ FMTONLY از SQL 2012 به بعد رسماً منقرض شده (Deprecated) چون: - با Temp Table و Table Variable قاطی می‌کنه - خیلی وقت‌ها خطای Invalid object name میده - خروجی DMVها نصفه‌نیمه برمی‌گردونه - روی نسخه‌های مختلف SQL Server متفاوت رفتار می‌کنه دقیقاً همون چیزیه که تو ابزارهای مانیتورینگ یا ORMها باعث Errorهای عجیب میشه. ✔️ جایگزین استاندارد و مدرن به‌جاش از این DMV فوق‌العاده استفاده کنید: SELECT * FROM sys.dm_exec_describe_first_result_set ( N'SELECT CustomerId, TotalPrice FROM Sales.Orders', NULL, NULL ); این کارها رو انجام می‌ده: ✔️ کوئری رو اجرا نمی‌کنه ✔️ ساختار دقیق نتیجه رو برمی‌گردونه ✔️ با نسخه‌های مختلف SQL Server سازگاره ✔️ با Temp Table و Dynamic SQL هم درست کار می‌کنه 🔥 مثال عملیِ واقعی فرض کن یک Stored Procedure داری: CREATE PROCEDURE dbo.UspGetOrders AS BEGIN SELECT TOP 100 OrderId, CustomerId, TotalAmount FROM Sales.Orders ORDER BY OrderDate DESC; END می‌خوای فقط ساختار خروجی رو ببینی، بدون این‌که SP رو واقعاً اجرا کنی: SELECT * FROM sys.dm_exec_describe_first_result_set ( N'EXEC dbo.UspGetOrders', NULL, NULL ); که میاد ساختار جداول و فیلدها رو بهتون ارائه میده. شما تاحالا ازش استفاده کردین؟
1 416
11
دوستان عزیزم سلام امیدوارم عالی باشین من به یک نفر نیاز دارم که ساکن تهران باشن و در کنار من باشن. پروژه هایی هست که من فرصت رسیدگی به اونها رو ندارم. قراردادهارو من میبندم و هر رقمی که قرارداد بستم با اون شخص به صورت 50-50 باهم کار می کنیم. اکثر کارها هم به صورت ساعتی هست این رقم هم خیلی متفاوته. ولی شخص بسیار خوش قولی رو نیاز دارم. مسئولیت پذیر باشه و به کارهایی که باید انجام بده متعهد باشه. خدایی یک دفعه غیبش نزنه و جواب نده. الان در حال حاضر شخصی که مدنظرم هست باید حتما روی BI, SSAS, Power BI مسلط باشه. و همچنین روی DAX,MDX . زمانهایی که باید سرپروژه ها حضور پیدا کنید یا کاری انجام بدین رو از قبل باهم هماهنگ می کنیم. و طبق زمان شما قول میدیم مگر اینکه یک کار فورس ماژوری پیش بیاد. اخر هر ماه نیز ساعتهارو من دریافت می کنم و پرداختش رو انجام میدم. تمام رقم قراردادهایی هم که باهم کار میکنیم رو باهاتون به اشتراک میذارم. با توجه به حجم کارهایی که دارم ، در صورتی که تعهد و اخلاق و زمان بندی مورد تاییدم باشه در مابقی پروژه ها نیز این همکاری رو ادامه میدیم. متاسفانه با چندین نفر کار کردم یک دفعه وسط کار بدون هیچ دلیلی کلا همه ارتباطاتشون رو بامن قطع کردن. خدایی اگه ناراحت شدین ، درخواست داشتین ، یک مشکلی براتون پیش اومد ، حوصله کار نداشتین ، حوصله کسی رو نداشتین قبلش به من اطلاع بدین که برای فلان مدت نمیتونم کار کنم یا به این دلیل ناراحتم . اگه واقعا نمیتونید این مساله ساده رو حل کنید و میخواهید قهر کنید ابدا پیام ندین. اگر با این شرایط موافق بودین لطفا رزومه هاتون رو برام بفرستید. دوستان بازهم تاکید می کنم ، چون قراردادهایی که میبندم اعتبارم و آبروم رو قرار میدم . پس برام این مساله در دسترس بودن و تعهد داشتن خیلی خیلی مهمه. ممنونم شاد باشین @Hamidreza_Sadehghian
109
12
سلام دوستان 🔄 همان‌طور که قول داده بودم، امروز می‌خواهم درباره فرآیند انتقال اطلاعات (Data Migration) که پیش‌تر درباره‌اش نوشته بودم، توضیح بدم. برای انجام یک مهاجرت داده‌ای تمیز، قابل اعتماد و بدون دردسر، چند مرحله کلیدی را طی کردم: 🖥 1. راه‌اندازی محیط محلی اول از همه یک سیستم محلی روی لپ‌تاپم راه‌اندازی کردم تا بتوانم دیتابیس را کامل و دقیق بررسی کنم. ساختار جداول، فیلدهای حساس، ارتباطات و ساختارهای درختی را تحلیل کردم تا بدانم هر تغییر چه تبعاتی دارد. 🗂 2. آماده‌سازی دیتابیس مقصد دیتابیس‌های مقصد را روی سیستمم بالا آوردم و شروع کردم به نوشتن اسکریپت جداول اصلی. اینجا نکته مهم این است که ترتیب ساخت جداول را دقیق رعایت کنید؛ چون برخی جداول، داده‌های پایه‌ای دارند و اگر ترتیب اشتباه باشد، با چالش‌های جدی مواجه می‌شوید. 🔁 3. ایجاد جدول Duplicate برای مدیریت داده‌های تکراری برای هر جدول، یک جدول جدید به نام Duplicate ساختم. هر رکوردی که احتمال تکرار ID داشت، وارد این جدول می‌شد تا بعداً درباره‌اش تصمیم بگیرم. در پروژه فعلی، IDها از نوع GUID هستند، پس احتمال تکرار بسیار کم است — اما وجود این لایه کنترلی ضروری است. 🚚 4. تست انتقال کامل داده‌ها ابتدا کدهای تولید داده و انتقال اطلاعات را نوشتم و کل دیتا را جابه‌جا کردم تا از صحت فرآیند مطمئن شوم. بعد از تأیید، آن را تبدیل به پکیج کردم تا: - قابل نگهداری‌تر باشد، - برای سایر دیتابیس‌ها هم قابل استفاده باشد، - و تغییرات در آینده راحت‌تر اعمال شود. 🛡 5. بکاپ‌گیری قبل از هر مرحله از دیتابیس خام یک بکاپ کامل گرفتم. هر زمان فرآیند به مشکل می‌خورد، بکاپ را ریستور می‌کردم و دوباره مرحله را تست می‌کردم. این کار زمان می‌گیرد، اما تضمین می‌کند فرآیند Migration تمیز و مطمئن پیش برود. ✔️ 6. تست نهایی با نرم‌افزار در پایان، خروجی را با نرم‌افزار اصلی تست کردم و خوشبختانه همه چیز درست بود. 📌 در پست‌های بعدی، نکات عمیق‌تر و تجربیات بیشتری را درباره طراحی پکیج‌های Migration و چالش‌های واقعی پروژه‌ها به اشتراک می‌گذارم. شاد باشین. @Hamidreza_Sadeghian
1 227
13
سلام دوستان عزیزم امیدوارم عالی باشین برای یک پروژه در آمریکا نیازمند یک شخص مسلط به Azure , Devops هستیم. کار به صورت پروژه ای و ساعتی هست نیازی به زبان انگلیسی نیست. اگرچه بلد باشید مزیت بزرگیه. فقط خواهشا دقت کنید. قول شما اهمیت داره وقت شما مهمه. اگر وقت ندارید ، یا این مدلی فکر می کنید که بریم کار رو زخمی کنیم حالا یک چیزی میشه. اصلا پیشنهاد ندید چون بلافاصله کار باهاتون قطع میشه. باید زمان بذارید و وقت بذارید و به قولی که میدین پایبند باشین. سر مسائل مالی هم خودتون مستقیما صحبت می کنید و توافق می کنید. پرداختی ها هم ماه به ماه توی حسابتون در ایران به ریال پرداخت میشه اگر تمایل داشتید به من پیام بدین شاد باشین حمیدرضا صادقیان @hamidreza_Sadeghian
334
14
سلام عزیزان امیدوارم عالی باشین از این لینک میتونید SQL Server 2025 Developer Edition رو دانلود کنید و باهاش کار کنید و لذت ببرید فقط سرجدتون از فردا همه پروژه هارو نبرید روی 2025. بذارید حداقل 1 سال از عرضه اون بگذره بعد سوئیچ کنید.😁 شاد باشین حمیدرضا صادقیان https://www.microsoft.com/en-us/sql-server/sql-server-downloads
1 704
15
📱 جذب فلاترکار پروژه‌ای برای فاز اول اپلیکیشن زیرنویس هوشمند «ساب نوا» پروژه‌ی ساب نوا (SubNova) یک اپلیکیشن هوشمند برای ترجمه , مدیریت، ویرایش و هماهنگ‌سازی زیرنویس‌هاست که با استفاده از هوش مصنوعی، قابلیت‌های ویژه‌ای مثل ترجمه‌ی خودکار، تشخیص گفتار و زمان‌بندی دقیق ارائه می‌دهد. در حال حاضر به دنبال یک توسعه‌دهنده Flutter هستیم تا در بخش اپلیکیشن موبایل Android با ما به‌صورت پروژه‌ای (Freelance) همکاری کند. مهارت‌های مورد نیاز: • تسلط کامل به Flutter • آشنایی با API integration (RESTful APIs) • توانایی کار با ویدیو پلیر و زیرنویس (subtitle handling) در فلاتر • آشنایی با State Management (Provider / Bloc / GetX) • تجربه‌ی انتشار اپلیکیشن در Google play و Bazarامتیاز محسوب می‌شود نوع همکاری: پروژه‌ای (ریموت) زمان‌بندی: منعطف دستمزد: توافقی بر اساس توانایی طرح‌های رابط کاربری اپلیکیشن در Figma طراحی شده و آماده‌ی پیاده‌سازی است. اگر به پروژه‌های نوآورانه با محوریت هوش مصنوعی علاقه‌مندید و مایلید طرح‌ها را ببینید و بخشی از تیم توسعه‌ی ساب نوا باشید، کافی‌ست به ما پیام بدهید تا دسترسی مشاهده‌ی طرح‌ها و جزئیات همکاری برایتان ارسال شود. 📧 ارسال رزومه و نمونه‌کار به تلگرام : @masoud_mj2 یا پیام در واتساپ: 09152028188
555
16
سلام دوستان عزیزم امیدوارم عالی باشین ما برای تپسی شاپ نیازمند یک نیروی حرفه ای در حوزه BI هستیم کسی که ETL بلد باشه . با مفاهیم DW کاملا آشنا باشه و با طراحی زیرساختهای BI آشنا باشه و کار کرده باشه. تپسی شاپ هم زیرمجموعه گروه صنعتی گلرنگ هست و یکی از شرکتهای تپسی. تیمی بسیار حرفه ای در حوزه نرم افزار اونجا هستند و به نظرم فضای جذابیه برای رشد و پیشرفت. اگر علاقمند هستید رزومه هاتون رو برای من بفرستید. دفتر شرکت در تهران - بهشتی هست. کار هم به صوره حضوری - دورکاری هست. تمام مزایای گروه صنعتی گلرنگ نیز برای این شرکت برقراره. نکته اینکه واقعا دنبال نیروی حرفه ای هستیم. فعلا شرایط کارآموزی نداریم. فضای دورکاری تمام نیز وجود نداره. ارادتمند @hamidreza_Sadeghian
891
17
سلام دوستان عزیزم امیدوارم عالی باشین شرکتهایی که تمایل دارن کارآموز جذب کنن در حوزه Data ، لطفا به من پیام بدین ارادتمند حمیدرضا صادقیان
652
18
سلام 💔 داستان Shrink در SQL Server 😅 ببینید رفقا، این عملیات Shrink کردن فایل‌های Data عین روابط عاشقانه‌ی پر فراز و نشیبِی
سلام 💔 داستان Shrink در SQL Server 😅 ببینید رفقا، این عملیات Shrink کردن فایل‌های Data عین روابط عاشقانه‌ی پر فراز و نشیبِیه! 😎 یه روز SQL Server میگه: "دیگه بهت نیاز ندارم 😤" و فایل Data رو کوچیک می‌کنه (کات می‌کنن خلاصه 💔) بعد صبح روز بعد دوباره میاد: "ببین من یه چیزی گفتم... 😅 بیا دوباره با هم باشیم!" و دوباره فضا می‌گیره 😬 شب دوباره job shrink اجرا میشه 😑 صبح دوباره SQL Server میاد میگه «برگرد پیشم!» و این چرخه تا ابد ادامه داره... 😭 📣 بابا ولش کنین دیگه! Shrink نکنید، بذارید رابطه‌ش آروم بگیره 😂 #SQLServer #DBA #ShrinkDrama #DatabaseHumor #ITLife #DBALife
2 304
19
سلام 🚀 یکی از پروژه‌های بهینه‌سازی دیتابیس که این روزا روش کار می‌کنم، یه ماجرای جالب داشت: رفیقای قدیم یه علاقه خاصی به ایندکس داشتن 😅 تو جداول پرکاربرد، رو هر چی فیلد بود یه ایندکس ساخته بودن! بعدش مثلاً علی رفته بود یه ایندکس روی تاریخ گذاشته، محمد اومده دیده "ای بابا! این علی بدون وضو ایندکس روی تاریخ گذاشته. خلاصه با نیت خالص و با وضو دوباره روی تاریخ ایندکس ایجاد کرده شاید امید به خدا درست کار کنه. " 😅✌️ ولی خب اون قبلی رو حذف نکرده بود، فقط اضافه کرده بود! نام‌گذاری‌ها هم در حد لیگ قهرمانان اروپا 🤦‍♂️ از 1 شروع کرده بودن و خیاری ادامه داده بودن. 📞 آخرش هم مشتری زنگ می‌زنه: "داداش می‌خوایم یه رکورد ثبت کنیم، جد و آبادمون داره جلوی چشممون رد میشه! چند دقیقه باید صبر کنیم تا بشه!" یاد اون دیالوگ اکبر عبدی توی اخراجی‌ها افتادم که می‌گفت: «بابام می‌گفت هرچی نماز بیشتر بخونی بهتره» اینا هم فکر کردن هرچی ایندکس بیشتر بذارن، دیتابیس خوشحال‌تر میشه! 😂 گفتن دیگه از ایندکس چیزی برای دیتابیس کم و کسری نذاریم. 😂 🔑 نتیجه اخلاقی: خداوکیلی این مدلی دیتابیس طراحی نکنید. ایندکس‌گذاری علمه، نه تعداد! 😉
2 199
20
سلام دوستان 🛒 یادتونه سال‌ها قبل از اینکه هایپراستار بیاد، برای هر چیزی مجبور بودیم بریم یه فروشگاه مخصوص همون؟ هیچ مرجعی نبود که یک‌جا همه نیازها رو پوشش بده. وقتی هایپراستار اومد، ملت استقبال کردن چون همه‌چی یه جا جمع بود: ✅ برندهای خوب ✅ اجناس درست‌حسابی ✅ خرید راحت‌تر نتیجه؟ دسترسی ساده‌تر به کالاها و در عوض فروش مغازه‌های اطراف به شدت افت کرد. حالا دقیقاً همین اتفاق توی دنیای SQL Server و Data Warehouse (DW) میفته. 📊 توی DW: داده‌ها از منابع مختلف (مثل همون فروشگاه‌ها یا کارخانه‌ها) جمع میشن. Master Data پیاده‌سازی میشه (یه کدینگ واحد برای کالاها). داده‌ها تمیز و پاکسازی میشن (کالاهای خراب و برندهای ضعیف حذف میشن). و در نهایت کاربر با یه منبع داده‌ی مرتب و درست سروکله می‌زنه و می‌تونه به صورت تجمیعی به همه نیازهای گزارش‌گیری و تصمیم‌گیری دسترسی داشته باشه—بدون اینکه مجبور باشه بره سراغ تک‌تک سیستم‌ها. ⚠️ پس اگه جایی اومدن براتون DW و BI راه انداختن ولی این اتفاقا نیفتاد… احتمالاً یه جای کار می‌لنگه 😉
1 841