آموزش جامع تابع FILEPROPERTY در SQL Server با ۱۰ مثال عملی
هنگامی که یک گزارش فنی باید هم برای DBA و هم برای توسعهدهنده قابل استفاده باشد، انتخاب تابع کمکی درست اهمیت زیادی پیدا میکند. در این مقاله، FILEPROPERTY از سطح مقدماتی تا سناریوهای حرفهای بررسی میشود و هر مثال با خروجی نمونه ارائه شده است.
محاسبه صفحات مصرفشده، شناسایی فایل اصلی، تشخیص فایل لاگ و کنترل Read-only بودن از مهمترین کاربردهای آن است. تمرکز آموزش بر این است که FILEPROPERTY در چه Contextی اجرا شود، نتیجه آن چگونه تفسیر شود و چه زمانی باید از یک DMV یا کاتالوگویوی جایگزین کمک گرفت.
برای مشاهده جایگاه FILEPROPERTY میان سایر توابع و شمارندهها، راهنمای جامع توابع کمکی کارایی و Metadata در SQL Server را نیز مطالعه کنید.
تعریف و کاربرد اصلی FILEPROPERTY
تابع FILEPROPERTY یک ویژگی مشخص از فایل منطقی پایگاه داده جاری را بهصورت عددی گزارش میکند. این تعریف در ظاهر کوتاه است، اما استفاده درست از FILEPROPERTY به درک مفاهیمی مانند SpaceUsed، IsReadOnly و IsPrimaryFile وابسته است.
قاعده عملی FILEPROPERTY: ابتدا ورودی و Context را معتبر کنید، سپس خروجی را با نوع داده و معنای واقعی آن تفسیر کنید.
Syntax تابع یا متغیر FILEPROPERTY
SELECT FILEPROPERTY ( file_name , property ) AS Result;
پارامترهای FILEPROPERTY
| پارامتر | توضیح |
|---|
| file_name | نام منطقی فایل در پایگاه داده جاری. |
| property | نام ویژگی پشتیبانیشده مانند SpaceUsed، IsReadOnly، IsPrimaryFile یا IsLogFile. |
نوع خروجی و رفتار NULL در FILEPROPERTY
int؛ مقدار بسته به Property میتواند تعداد Page یا صفر و یک باشد و در ورودی نامعتبر NULL میشود. در کد تولیدی بهتر است نوع مقصد بهصورت صریح تعیین شود؛ زیرا تبدیل ضمنی میتواند مقایسه، مرتبسازی یا ذخیره نتیجه FILEPROPERTY را مبهم کند.
مفاهیم کلیدی مرتبط با FILEPROPERTY
- SpaceUsed
- IsReadOnly
- IsPrimaryFile
- IsLogFile
- pages
- logical file
- capacity planning
تصویر نخست، ارتباط FILEPROPERTY را با مفاهیم اختصاصی SpaceUsed، IsReadOnly، IsPrimaryFile و IsLogFile نشان میدهد؛ این روابط مبنای انتخاب ورودی و تفسیر خروجی هستند.
سناریوهای واقعی استفاده از FILEPROPERTY
سناریوی 1 برای FILEPROPERTY، «محاسبه فضای آزاد فایل» است. در این حالت باید نتیجه همراه Context پایگاه داده، زمان نمونهبرداری و در صورت نیاز شناسه نشست ثبت شود تا داده برای عیبیابی بعدی ارزش داشته باشد.
سناریوی 2 برای FILEPROPERTY، «تشخیص فایل Primary» است. در این حالت باید نتیجه همراه Context پایگاه داده، زمان نمونهبرداری و در صورت نیاز شناسه نشست ثبت شود تا داده برای عیبیابی بعدی ارزش داشته باشد.
سناریوی 3 برای FILEPROPERTY، «کنترل فایل Read-only» است. در این حالت باید نتیجه همراه Context پایگاه داده، زمان نمونهبرداری و در صورت نیاز شناسه نشست ثبت شود تا داده برای عیبیابی بعدی ارزش داشته باشد.
سناریوی 4 برای FILEPROPERTY، «پایش اندازه لاگ» است. در این حالت باید نتیجه همراه Context پایگاه داده، زمان نمونهبرداری و در صورت نیاز شناسه نشست ثبت شود تا داده برای عیبیابی بعدی ارزش داشته باشد.
مثالهای عملی FILEPROPERTY از ساده تا حرفهای
مثال 1: محاسبه صفحات مصرفشده
ویژگی SpaceUsed را برای فایل داده میخوانیم. این سناریو بهطور اختصاصی برای درک رفتار FILEPROPERTY طراحی شده است.
SELECT FILEPROPERTY(N'a00b', N'SpaceUsed') AS UsedPages;
هر Page در SQL Server برابر 8KB است. هنگام استفاده سازمانی از FILEPROPERTY، خروجی نمونه را با داده واقعی محیط خود تطبیق دهید.
مثال 2: تبدیل SpaceUsed به مگابایت
تعداد Page را به MB تبدیل میکنیم. این سناریو بهطور اختصاصی برای درک رفتار FILEPROPERTY طراحی شده است.
SELECT CAST(
FILEPROPERTY(N'a00b', N'SpaceUsed') * 8.0 / 1024
AS decimal(18,2)
) AS UsedMB;
استفاده از 8.0 محاسبه اعشاری را حفظ میکند. هنگام استفاده سازمانی از FILEPROPERTY، خروجی نمونه را با داده واقعی محیط خود تطبیق دهید.
مثال 3: محاسبه فضای آزاد فایل
size کاتالوگ را با SpaceUsed مقایسه میکنیم. این سناریو بهطور اختصاصی برای درک رفتار FILEPROPERTY طراحی شده است.
SELECT df.name,
CAST(df.size * 8.0 / 1024 AS decimal(18,2)) AS SizeMB,
CAST(FILEPROPERTY(df.name, N'SpaceUsed') * 8.0 / 1024 AS decimal(18,2)) AS UsedMB,
CAST((df.size - FILEPROPERTY(df.name, N'SpaceUsed')) * 8.0 / 1024 AS decimal(18,2)) AS FreeMB
FROM sys.database_files AS df
WHERE df.type_desc = N'ROWS';
| name | SizeMB | UsedMB | FreeMB |
|---|
| a00b | 1024.00 | 780.00 | 244.00 |
فضای آزاد داخلی با فضای آزاد Drive متفاوت است. هنگام استفاده سازمانی از FILEPROPERTY، خروجی نمونه را با داده واقعی محیط خود تطبیق دهید.
مثال 4: تشخیص فایل اصلی
Property مربوط به فایل Primary را بررسی میکنیم. این سناریو بهطور اختصاصی برای درک رفتار FILEPROPERTY طراحی شده است.
SELECT FILEPROPERTY(N'a00b', N'IsPrimaryFile') AS IsPrimaryFile;
خروجی یک یعنی فایل داده اصلی پایگاه است. هنگام استفاده سازمانی از FILEPROPERTY، خروجی نمونه را با داده واقعی محیط خود تطبیق دهید.
تصویر دوم، جریان اجرای FILEPROPERTY را از ورودی و اعتبارسنجی تا تولید خروجی نمایش میدهد و نشان میدهد که pages در کدام مرحله باید کنترل شود.
ادامه مثالهای پیشرفته FILEPROPERTY
مثال 5: تشخیص فایل لاگ
نام فایل لاگ را با IsLogFile میسنجیم. در این مثال، هدف تنها اجرای Query نیست؛ بلکه نشان دادن یک تصمیم فنی صحیح پیرامون FILEPROPERTY است.
SELECT FILEPROPERTY(N'a00b_log', N'IsLogFile') AS IsLogFile;
این Property برای فایل داده مقدار صفر میدهد. این نکته از تفسیر سطحی یا استفاده تکراری و بیهدف از FILEPROPERTY جلوگیری میکند.
مثال 6: بررسی Read-only
وضعیت فقطخواندنی فایل را میگیریم. در این مثال، هدف تنها اجرای Query نیست؛ بلکه نشان دادن یک تصمیم فنی صحیح پیرامون FILEPROPERTY است.
SELECT FILEPROPERTY(N'a00b', N'IsReadOnly') AS IsReadOnly;
صفر یعنی فایل در وضعیت معمول قابل نوشتن است. این نکته از تفسیر سطحی یا استفاده تکراری و بیهدف از FILEPROPERTY جلوگیری میکند.
مثال 7: رفتار نام نامعتبر در آموزش FILEPROPERTY
نام اشتباه به NULL منجر میشود. در این مثال، هدف تنها اجرای Query نیست؛ بلکه نشان دادن یک تصمیم فنی صحیح پیرامون FILEPROPERTY است.
SELECT COALESCE(
CONVERT(nvarchar(20), FILEPROPERTY(N'not_exists', N'SpaceUsed')),
N'NULL'
) AS SafeResult;
NULL را با فضای مصرفشده صفر اشتباه نگیرید. این نکته از تفسیر سطحی یا استفاده تکراری و بیهدف از FILEPROPERTY جلوگیری میکند.
مثال 8: گزارش چند فایل داده
Property را برای تمام فایلهای ROWS محاسبه میکنیم. در این مثال، هدف تنها اجرای Query نیست؛ بلکه نشان دادن یک تصمیم فنی صحیح پیرامون FILEPROPERTY است.
SELECT df.file_id,
df.name,
FILEPROPERTY(df.name, N'SpaceUsed') AS UsedPages
FROM sys.database_files AS df
WHERE df.type = 0
ORDER BY df.file_id;
| file_id | name | UsedPages |
|---|
| 1 | a00b | 99840 |
برای پایگاه دارای چند NDF، هر ردیف جداگانه محاسبه میشود. این نکته از تفسیر سطحی یا استفاده تکراری و بیهدف از FILEPROPERTY جلوگیری میکند.
مثال 9: روش اشتباه در تقسیم صحیح
تفاوت تقسیم صحیح و اعشاری را نشان میدهیم. در این مثال، هدف تنها اجرای Query نیست؛ بلکه نشان دادن یک تصمیم فنی صحیح پیرامون FILEPROPERTY است.
SELECT
FILEPROPERTY(N'a00b', N'SpaceUsed') * 8 / 1024 AS TruncatedMB,
FILEPROPERTY(N'a00b', N'SpaceUsed') * 8.0 / 1024 AS AccurateMB;
| TruncatedMB | AccurateMB |
|---|
| 780 | 780.00 |
در گزارش ظرفیت از decimal استفاده کنید تا بخش اعشاری حذف نشود. این نکته از تفسیر سطحی یا استفاده تکراری و بیهدف از FILEPROPERTY جلوگیری میکند.
مثال 10: گزارش کارای فضای فایل
Metadata و Property را یک بار در APPLY محاسبه میکنیم. در این مثال، هدف تنها اجرای Query نیست؛ بلکه نشان دادن یک تصمیم فنی صحیح پیرامون FILEPROPERTY است.
SELECT df.name,
x.UsedPages,
CAST(x.UsedPages * 8.0 / 1024 AS decimal(18,2)) AS UsedMB
FROM sys.database_files AS df
CROSS APPLY
(
VALUES(FILEPROPERTY(df.name, N'SpaceUsed'))
) AS x(UsedPages)
WHERE df.type = 0;
| name | UsedPages | UsedMB |
|---|
| a00b | 99840 | 780.00 |
محاسبه یکباره خوانایی فرمولهای بعدی را بهتر میکند. این نکته از تفسیر سطحی یا استفاده تکراری و بیهدف از FILEPROPERTY جلوگیری میکند.
خطاهای رایج در کار با FILEPROPERTY
خطای 1 در استفاده از FILEPROPERTY
SpaceUsed بر حسب Page است و برای تبدیل تقریبی به MB باید در 8 ضرب و بر 1024 تقسیم شود. برای رفع این مشکل، ورودی و Context را از منبع معتبر بخوانید و نتیجه FILEPROPERTY را پیش از ادامه منطق با شرط صریح کنترل کنید.
خطای 2 در استفاده از FILEPROPERTY
این تابع به فایلهای پایگاه داده جاری محدود است. برای رفع این مشکل، ورودی و Context را از منبع معتبر بخوانید و نتیجه FILEPROPERTY را پیش از ادامه منطق با شرط صریح کنترل کنید.
خطای 3 در استفاده از FILEPROPERTY
برای ظرفیت کامل، مقدار size در sys.database_files را کنار SpaceUsed تحلیل کنید. برای رفع این مشکل، ورودی و Context را از منبع معتبر بخوانید و نتیجه FILEPROPERTY را پیش از ادامه منطق با شرط صریح کنترل کنید.
ملاحظات Performance برای FILEPROPERTY
از نظر کارایی، FILEPROPERTY زمانی کمهزینه باقی میماند که روی یک مقدار هدفمند یا مجموعه محدود اجرا شود. فراخوانی آن روی هزاران ردیف بدون Predicate اولیه میتواند CPU و زمان گزارش را افزایش دهد.
اگر گزارش به چند Property از چندین شیء نیاز دارد، استفاده Set-based از کاتالوگویو یا DMV مرتبط با SpaceUsed معمولاً بهتر از تکرار FILEPROPERTY برای هر سلول است.
در Jobهای دورهای، نتیجه FILEPROPERTY را همراه Timestamp ذخیره کنید، اما Frequency نمونهبرداری را متناسب با سرعت تغییر داده انتخاب کنید. جمعآوری بیش از حد، جدول تاریخچه را بدون ارزش تحلیلی بزرگ میکند.
برای محاسبات عددی پیرامون FILEPROPERTY، نوع داده را قبل از ضرب یا تفریق ارتقا دهید و در سناریوهای تجمعی، Restart و بازنشانی Baseline را در نظر بگیرید.
Best Practiceهای اختصاصی FILEPROPERTY
- ورودی FILEPROPERTY را از نام یا شناسه معتبر و دارای Schema یا Context روشن تأمین کنید.
- نتیجه NULL در FILEPROPERTY را از مقدار صفر، false یا رشته خالی جدا نگه دارید.
- نوع خروجی FILEPROPERTY را پیش از ذخیره یا مقایسه به نوع مقصد مناسب تبدیل کنید.
- در گزارشهای بزرگ، گزینه Set-based مرتبط با SpaceUsed را ارزیابی کنید.
- زمان Capture، نام Database و در صورت نیاز @@SPID را کنار نتیجه FILEPROPERTY ثبت کنید.
- مجوز مشاهده Metadata یا DMV را با حداقل سطح دسترسی لازم تنظیم کنید. در مبحث FILEPROPERTY
- مثالهای FILEPROPERTY را روی نسخه و Edition واقعی محیط هدف آزمایش کنید.
- برای SQL پویا، خروجی نامی FILEPROPERTY را با QUOTENAME و پارامترسازی ایمن مصرف کنید.
تصویر سوم، تفاوت روش پرخطر و Best Practice در استفاده از FILEPROPERTY را مقایسه میکند؛ هدف آن جلوگیری از خطاهای مربوط به SpaceUsed بر حسب Page است و برای تبدیل تقریبی به MB باید در 8 ضرب و بر 1024 تقسیم شود. و بهبود تصمیمگیری فنی است.
سؤالات متداول اختصاصی FILEPROPERTY
FILEPROPERTY دقیقاً چه مسئلهای را در SQL Server حل میکند؟
تابع FILEPROPERTY یک ویژگی مشخص از فایل منطقی پایگاه داده جاری را بهصورت عددی گزارش میکند. در عمل، محاسبه صفحات مصرفشده، شناسایی فایل اصلی، تشخیص فایل لاگ و کنترل Read-only بودن از مهمترین کاربردهای آن است. بنابراین استفاده از FILEPROPERTY زمانی ارزشمند است که خروجی آن در یک تصمیم فنی روشن مصرف شود، نه اینکه فقط برای نمایش عدد یا نام به کار رود.
نوع خروجی FILEPROPERTY چیست و چگونه باید آن را مدیریت کرد؟
نوع خروجی این ابزار چنین است: int؛ مقدار بسته به Property میتواند تعداد Page یا صفر و یک باشد و در ورودی نامعتبر NULL میشود. بهتر است پیش از تبدیل نوع، مقایسه یا درج در جدول گزارش، حالت NULL و محدوده مقدار را صریح کنترل کنید تا رفتار FILEPROPERTY قابل پیشبینی بماند.
آیا FILEPROPERTY در گزارشهای سازمانی کاربرد تجاری دارد؟
بله. در سناریوهایی مانند محاسبه فضای آزاد فایل و تشخیص فایل Primary، خروجی FILEPROPERTY میتواند کیفیت گزارش مدیریتی را بالا ببرد. ارزش تجاری زمانی ایجاد میشود که این داده به هشدار، ظرفیتسنجی یا کاهش زمان عیبیابی متصل شود.
استفاده از FILEPROPERTY در پروژههای بزرگ چه مزیتی دارد؟
در پروژه بزرگ، استانداردسازی نحوه استفاده از FILEPROPERTY باعث میشود تیم توسعه، DBA و پشتیبانی یک تعریف مشترک از SpaceUsed و IsReadOnly داشته باشند. این هماهنگی خطاهای تفسیر و دوبارهکاری را کاهش میدهد.
تفاوت FILEPROPERTY با گزینه نزدیک آن چیست؟
FILEPROPERTY ویژگی یک فایل مشخص را میدهد، در حالی که sys.database_files مجموعه کامل Metadata همه فایلها را برمیگرداند. انتخاب صحیح باید بر اساس حجم داده، نیاز به خروجی Set-based و سطح جزئیات گزارش انجام شود؛ یک تابع scalar همیشه جایگزین کاتالوگویو یا DMV کامل نیست.
برای طراحی اسکریپت حرفهای مبتنی بر FILEPROPERTY چه خدماتی لازم میشود؟
در پروژههای حساس میتوان منطق FILEPROPERTY را در قالب رویه مانیتورینگ، Dashboard، گزارش زمانبندیشده یا کنترل Deployment پیاده کرد. تحلیل نیاز، تست روی نسخه واقعی SQL Server و مستندسازی خروجی، بخشهای مهم خدمات مشاوره و انجام پروژه هستند.
رایجترین خطا هنگام کار با FILEPROPERTY چیست؟
یکی از خطاهای مهم این است که SpaceUsed بر حسب Page است و برای تبدیل تقریبی به MB باید در 8 ضرب و بر 1024 تقسیم شود. همچنین نادیده گرفتن NULL یا Context اجرای Query میتواند نتیجهای ظاهراً معتبر ولی از نظر عملیاتی اشتباه تولید کند.
آیا فراخوانی زیاد FILEPROPERTY بر Performance اثر میگذارد؟
یک فراخوانی منفرد معمولاً سبک است، اما اجرای FILEPROPERTY روی مجموعه بسیار بزرگ یا در شرطی که برای هر ردیف محاسبه شود میتواند هزینه ایجاد کند. ابتدا ردیفها را محدود کنید و در گزارشهای وسیع، جایگزین Set-based را ارزیابی کنید.
بهترین روش استفاده از FILEPROPERTY چیست؟
بهترین روش این است که ورودی FILEPROPERTY اعتبارسنجی، نوع خروجی صریح، حالت NULL مدیریت و نتیجه همراه زمان و Context ثبت شود. همچنین باید مشخص باشد که خروجی برای نمایش، کنترل ایمنی یا تصمیم کارایی مصرف میشود.
FILEPROPERTY با کدام نسخههای SQL Server سازگار است؟
در SQL Serverهای متداول موجود است و برای اسکریپتهای نگهداری سبک مناسب است. با این حال، هنگام انتقال اسکریپت به Azure SQL یا Edition دیگر، Propertyها، مجوزهای Metadata و تفاوتهای پلتفرم را روی همان محیط آزمایش کنید.
سؤالات مصاحبه درباره FILEPROPERTY
در مصاحبه چگونه تفاوت ورودی و خروجی FILEPROPERTY را توضیح میدهید؟
پاسخ مناسب باید Syntax یعنی FILEPROPERTY ( file_name , property )، نوع خروجی و شرایط NULL را توضیح دهد و یک نمونه از محاسبه فضای آزاد فایل ارائه کند.
چه زمانی بهجای FILEPROPERTY از کاتالوگویو یا DMV استفاده میکنید؟
وقتی گزارش چندین ردیف و چند Property نیاز دارد، روش Set-based معمولاً مناسبتر است؛ FILEPROPERTY برای تبدیل یا بررسی هدفمند یک مقدار بسیار خواناست.
چگونه نتیجه نامعتبر FILEPROPERTY را از مقدار false یا صفر جدا میکنید؟
با بررسی صریح IS NULL، اعتبارسنجی ورودی و در صورت نیاز Join با Metadata منبع، علت نتیجه را روشن میکنم. این توضیح بهطور اختصاصی به FILEPROPERTY مربوط است.
چه نکته Performance درباره FILEPROPERTY مهم است؟
فراخوانی را پس از محدود کردن مجموعه داده انجام میدهم و از محاسبه تکراری FILEPROPERTY در SELECT و WHERE جلوگیری میکنم.
یک سناریوی واقعی برای FILEPROPERTY بیان کنید.
سناریوی مناسب میتواند کنترل فایل Read-only باشد؛ در آن خروجی همراه Timestamp، نام Database و شناسه نشست ثبت میشود تا قابل پیگیری باشد.
چکلیست نهایی استفاده از FILEPROPERTY
- Syntax FILEPROPERTY و ورودیهای آن با نسخه هدف تطبیق داده شده است.
- Context پایگاه داده یا Instance برای FILEPROPERTY روشن است.
- مجوز لازم برای Metadata یا DMV بررسی شده است. در مبحث FILEPROPERTY
- NULL، مقدار نامعتبر و حالت مرزی FILEPROPERTY تست شده است.
- نمونه خروجی با نوع داده واقعی مقایسه شده است. در مبحث FILEPROPERTY
- در Query بزرگ، هزینه فراخوانی تکراری FILEPROPERTY اندازهگیری شده است.
- جایگزین Set-based برای گزارش انبوه ارزیابی شده است. در مبحث FILEPROPERTY
- نتیجه نهایی همراه Timestamp و توضیح عملیاتی ثبت میشود. در مبحث FILEPROPERTY
جمعبندی آموزش FILEPROPERTY
FILEPROPERTY ابزاری کوچک اما مؤثر برای محاسبه صفحات مصرفشده، شناسایی فایل اصلی، تشخیص فایل لاگ و کنترل Read-only بودن از مهمترین کاربردهای آن است. است. استفاده حرفهای از آن به اعتبارسنجی ورودی، تفسیر نوع خروجی، کنترل NULL و انتخاب Scope مناسب وابسته است.
پس از تسلط بر FILEPROPERTY، برای مقایسه آن با سایر ابزارهای این مجموعه به مقاله مادر توابع کمکی Performance و Metadata در SQL Server بازگردید.
خدمات برنامهنویسی و پایگاه داده
برنامهنویسی در اصفهان
قبول سفارشهای برنامهنویسی و پایگاه داده: 09131253620
انجام پروژههای برنامهنویسی، آموزش برنامهنویسی و آموزش پایگاه داده SQL Server با رویکرد حرفهای، مستند و قابل توسعه انجام میشود.
مجموعهای معتبر با سابقه فعالیت حرفهای از سال ۱۳۷۵ شمسی
از سال ۱۳۷۵ شمسی تاکنون در زمینه طراحی و اجرای پروژههای برنامهنویسی، پایگاه داده، سیستمهای تحت وب، وبسایت و راهکارهای نرمافزاری فعالیت میکنیم.
برای سفارش پروژههای برنامهنویسی و پایگاه داده، سیستمهای تحت وب، وبسایت و راهکارهای نرمافزاری جدید، با شماره تلفن همراه 09131253620 تماس حاصل فرمایید.
ایتا، واتساپ و تماس مستقیم: +989131253620
تماس با ما