سرور گزارشگیری درونسازمانی مایکروسافت Power BI Report Server (PBIRS) و پکیج بهینهسازی مدلهای معنایی Tabular Editor 3، ستون فقرات داشبوردهای مدیریتی، هوش تجاری و تحلیل عملکرد در هلدینگها و سازمانهای بزرگ ایران هستند. با این وجود، با گذشت ۶ تا ۱۲ ماه از استقرار، اکثر مدیران IT با مشکل رشد بیرویه پایگاهداده ReportServer، مصرف ۱۰۰ درصدی حافظه RAM توسط سرویس msmdsrv.exe (موتور Analysis Services VertiPaq) و تایماوت در باز کردن داشبوردهای کلان مواجه میشوند.
پکیج لایسنس و بهینهسازی Licentra Power BI & Tabular Suite علاوه بر فعالسازی نامحدود نودها و هستههای پردازنده، ابزارها و تنظیمات پایهای را برای مدیریت صدها گیگابایت داده فراهم میکند. این راهنما به صورت گامبهگام دستورالعملهای نگهداری دیتابیس، تنظیم پارامترهای حافظه، اسکریپتهای پاکسازی لاگها و تکنیکهای بهینهسازی DAX را بررسی مینماید.
۱. چرخه پردازش و منابع در Power BI Report Server #
گزارشهای Power BI در PBIRS به دو صورت اجرا میشوند: مدلهای اینپورتشده (Import Mode که کل مدل تبولار در RAM قرار میگیرد) و مدلهای کوئری مستقیم (DirectQuery که کوئری بلادرنگ به پایگاهداده مقصد ارسال میشود):
[مرورگر کاربر / اپلیکیشن موبایل Power BI]
│
▼ (پورت 80 / 443 با احراز هویت NTLM یا Kerberos)
┌────────────────────────────────────────────────────────┐
│ لایه وب و پورتال PBIRS (PowerBIReportServer.exe) │
│ - کاتالوگ گزارشها، اشتراکها و زمانبندی رفرش دادهها │
│ - احراز هویت کاربران و مدیریت مجوزهای RLS │
└──────────────────────────┬─────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────┐
│ موتور محاسباتی حافظهمحور (msmdsrv.exe - SSAS VertiPaq)│
│ - فشردهسازی ستونی دادهها درون حافظه موقت RAM │
│ - اجرای موتور فرمولهای محاسباتی DAX Formula Engine │
└──────────────────────────┬─────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────┐
│ پایگاهداده کاتالوگ (SQL Server - ReportServer DB) │
│ - جدول ExecutionLogStorage (آمار صدور گزارشها) │
│ - جدول Segment (بستههای باینری فشرده مدلهای PBIX) │
└────────────────────────────────────────────────────────┘
دلایل اصلی افت سرعت در طول زمان:
-
1
انباشت میلیونی رکوردها در جدول
ExecutionLogStorage: هر بار مشاهده گزارش توسط هر کاربر، یک لاگ سنگین در دیتابیس ذخیره میکند که پس از چند ماه به دهها میلیون رکورد و حجمهای بالای ۵۰ گیگابایت میرسد. -
2
عدم تفکیک فایلهای TempDB در SQL Server: ایجاد صف انتظار (I/O Bottleneck) در پردازش کوئریهای پیچیده گزارشها.
-
3
نبود سقف مصرف حافظه برای موتور VertiPaq: سرویس بدون محدودیت تا ۹۵٪ حافظه سرور را اشغال کرده و موجب کرش ویندوز یا عدم پاسخگویی IIS میشود.
۲. اسکریپت T-SQL پاکسازی و آرشیو دیتابیس ReportServer #
اجرای منظم این اسکریپت شبانه باعث کاهش فوری حجم دیتابیس کاتالوگ و افزایش چشمگیر سرعت باز شدن صفحات پورتال میگردد:
-- Licentra PBIRS Database Maintenance & Log Pruning Script
USE [ReportServer];
GO
-- 1. Purge ExecutionLogStorage older than 90 days
DECLARE @RetentionDays INT = 90;
DECLARE @CutoffDate DATETIME = DATEADD(DAY, -@RetentionDays, GETDATE());
DELETE FROM [dbo].[ExecutionLogStorage]
WHERE [TimeStart] < @CutoffDate;
-- 2. Clean orphaned temporary sessions and expired snapshots
DELETE FROM [dbo].[SessionData]
WHERE [Expiration] < GETDATE();
DELETE FROM [dbo].[SnapshotData]
WHERE [PermanentImage] = 0 AND [ExpirationDate] < GETDATE();
-- 3. Rebuild indexes on critical catalog tables
ALTER INDEX ALL ON [dbo].[ExecutionLogStorage] REBUILD WITH (FILLFACTOR = 90, ONLINE = ON);
ALTER INDEX ALL ON [dbo].[Catalog] REBUILD WITH (FILLFACTOR = 90, ONLINE = ON);
PRINT 'ReportServer maintenance completed successfully.';
GO
۳. تنظیم سقف حافظه (Memory Limits) در موتور Analysis Services #
فایل پیکربندی سرویس تحلیل داده در مسیر زیر قرار دارد:
C:\Program Files\Microsoft Power BI Report Server\PBIRS\ASEngine\msmdsrv.ini
باید پارامترهای زیر برای جلوگیری از پر شدن تمام RAM اصلاح شوند:
<ConfigurationSettings>
<!-- Hard cap memory at 75% of total server physical RAM -->
<Memory>
<!-- LowMemoryLimit: Start trimming cache at 60% of total memory -->
<LowMemoryLimit>60</LowMemoryLimit>
<!-- HighMemoryLimit: Stop allocating memory to background refreshes at 75% -->
<HighMemoryLimit>75</HighMemoryLimit>
<!-- HardMemoryLimit: Abort runaway rogue queries at 85% -->
<HardMemoryLimit>85</HardMemoryLimit>
<VertiPaqMemoryLimit>70</VertiPaqMemoryLimit>
</Memory>
</ConfigurationSettings>
پس از ویرایش فایل، سرویس PowerBIReportServer باید یک بار ریستارت گردد تا تنظیمات جدید بدون وقفه در پردازشها اعمال شوند.
۴. کاهش مصرف حجم مدل با استفاده از Tabular Editor 3 #
استفاده از ابزار مهندسی Tabular Editor 3 که در پکیج لایسنترا قرار دارد، امکان اصلاح ساختار دادهها را فراهم میکند:
-
1
حذف ستونهای تاریخ/زمان با جزئیات ثانیه (High Cardinality): ستونهای تاریخ و زمان را به دو ستون مجزا (یک ستون تاریخ Date و یک ستون ساعت Hour) تفکیک کنید؛ این کار حجم رم مدل را بین ۳۰٪ تا ۵۰٪ کاهش میدهد.
-
2
جایگزینی فرمولهای کند DAX: پرهیز از استفاده از تابع
EARLIERو جایگزینی آن با متغیرهای بهینهVAR / RETURNکه نتیجه را کش میکنند. -
3
تنظیم فرمت رمزنگاری ستونها (Encoding Hint): تنظیم ستونهای عددی روی
Value Encodingبه جایHash Encoding.
// Optimized DAX Pattern using VAR cached evaluation
Measure_Sales_YoY_Growth :=
VAR CurrentSales = [Total_Sales]
VAR PriorYearSales = CALCULATE([Total_Sales], SAMEPERIODLASTYEAR('DimDate'[Date]))
RETURN
IF(
NOT ISBLANK(PriorYearSales) && PriorYearSales > 0,
DIVIDE(CurrentSales - PriorYearSales, PriorYearSales, 0),
BLANK()
)
۵. ماتریس چکلیست پایش و تیونینگ دیتابیس #
| ردیف | مولفه زیرساخت | شاخص بهینگی | ابزار مانیتورینگ |
|---|---|---|---|
| ۱ | TempDB SQL Server | وجود حداقل ۸ فایل با حجم یکسان روی NVMe | SSMS Database Properties |
| ۲ | زمان رفرش دیتاسِتها | پراکندگی ساعات رفرش در بازههای غیرکاری | PBIRS Scheduled Refresh UI |
| ۳ | شاخص کشینگ صفحه | فعال بودن لاگ کش خودکار گزارشهای پربازدید | Report Manager Settings |
| ۴ | مانیتور حافظه رم | میانگین مصرف RAM زیر ۷۵٪ ظرفیت سرور | Windows Performance Monitor |
این بهینهسازیها تضمین میکنند که پورتال گزارشگیری سازمانی حتی با بیش از ۵۰۰ داشبورد فعال و صدها کاربر تصمیمگیرنده، بدون تأخیر و با بالاترین پایداری عمل نماید.



