تکنیکهای بهینهسازی عملکرد در پروژههای SSIS
این مقاله فهرستی از SSIS Best Practices (بهترین شیوههای SSIS) را توضیح میدهد که باید برای دستیابی به عملکرد بهینهی Packageها در محیط Production اعمال شوند.
بهترین شیوههای SSIS
موارد زیر برخی از بهترین شیوهها هنگام کار با پروژههای SSIS هستند، اما محدود به اینها نمیباشند:
اگر SSIS و SQL Server روی یک سرور اجرا میشوند، برای بهبود عملکرد Integration Services به جای OLE DB Destination از SQL Server Destination استفاده کنید.
اگر جدول مقصد دارای Partition باشد، پردازش موازی (Parallel Processing) را برای بارگذاری سریعتر دادهها انجام دهید.
به جای استفاده جداگانه از دستورات Insert، Update و Delete، از Merge Statement یا کوئری ترکیبی استفاده کنید.
هنگام بارگذاری حجم بالایی از داده، سعی کنید همهی Indexهای موجود روی جدول مقصد را حذف کنید. پس از بارگذاری داده، دوباره آن Indexها را ایجاد نمایید. این روش عملکرد را بهبود میبخشد.
فقط در صورت نیاز از Transactionها استفاده کنید.
برای حذف Lockingها از NOLOCK استفاده نمایید.
از تبدیل OLE DB Command Transformation تا حد امکان پرهیز کنید.
عملیات Staging را به حداقل برسانید.
سایر بهترین شیوههای SSIS
علاوه بر موارد بالا، چند SSIS Best Practices مهم دیگر نیز وجود دارند که باید برای عملکرد بهتر اعمال شوند.
انتخاب ستونهای جدول
بهصورت پیشفرض، OLE DB و ADO.NET Sourceها اجازه انتخاب جدولها از درون یک Database را میدهند. این روش از دستور SELECT * FROM Table
استفاده میکند. استفاده از این دستور منجر به مشکلات عملکردی در زمان اجرا میشود، چرا که فضای Buffer با ستونهای غیرضروری پر خواهد شد.
همیشه کوئری خودتان را بنویسید و فقط ستونهای مورد نیاز را انتخاب کنید.
اتصال چند جدول به یکدیگر
به جای استفاده از SSIS Merge Join Transformation برای اتصال چند جدول، از یک کوئری استفاده کنید و انواع Joinها مانند Left Join، Right Join، Inner Join، Self Join یا Cross Join را مستقیماً در آن بنویسید.
این کار باعث میشود از مرحلهی اضافی Sort Transformation (مرتبسازی ورودیها) جلوگیری شود.
Data Access Mode
همیشه از گزینهی SQL Command استفاده کنید و کوئری موردنظر را بنویسید. در غیر این صورت، Stored Procedure را انتخاب کنید.
انتخاب مستقیم جدول (Table) را بهطور کامل کنار بگذارید.
Stored Procedures
در صورت وجود هرگونه تغییر، بهترین شیوه آن است که از Stored Procedureها در SSIS استفاده کنید.
محدود کردن تعداد رکوردها
از شرط WHERE در کوئری استفاده کنید تا تعداد ردیفهایی که توسط دستور SELECT بازگردانده میشود محدود گردد.
برای مثال، فقط فروشهای یک منطقه خاص یا سفارشهای هفته گذشته را بازیابی کنید.
ترکیب چند جدول
بهجای بارگذاری دادهها از چند جدول بهصورت جداگانه و استفاده از Union All Transformation در SSIS، از عملگر UNION یا UNION ALL در داخل کوئری استفاده کنید.
تجمیع دادهها (Aggregations)
از انجام Aggregation در دادههای حجیم با میلیونها رکورد در داخل SSIS خودداری کنید. در عوض، از دستور GROUP BY
در داخل کوئری استفاده نمایید.
مرتبسازی دادهها (Sort Data)
اغلب جدولها به دلیل وجود Indexها، در پایگاه داده بهطور پیشفرض مرتب هستند. با این حال، میتوانید برای مرتبسازی دادهها از عبارت ORDER BY در کوئری استفاده کنید، به جای استفاده از Sort Transformation.
زیرا Sort Transformation یک عملیات کاملاً Blocking محسوب میشود و مرتبسازی را در حافظه انجام میدهد.
تبدیل نوع دادهها (Data Type Conversion)
سعی کنید تبدیل نوع دادهها (Data Type Conversion) را به حداقل برسانید. از آنها اجتناب کرده و در سطح کوئری انجامشان دهید تا عملکرد بهتری داشته باشید.
تبدیل تاریخ و زمان (DateTime Conversions)
یکی از SSIS Best Practices این است که عملیات تبدیل تاریخ و زمان را در جدول Source یا Destination انجام دهید، نه در داخل SSIS.
بررسی انتخاب ستونها در تب Columns
فعال گذاشتن همه ستونها در Source Component و سپس حذف انتخاب (Uncheck) ستونهای غیرضروری، یک روش نادرست است.
زیرا وقتی ستونها وارد حافظه شدهاند، خارج کردنشان از انتخاب باعث بهبود عملکرد نمیشود.
همیشه فقط ستونهای مورد نیاز را از ابتدا وارد کنید.
پاکسازی دادهها هنگام بارگذاری (Clean Data while Loading)
اگر دادهها را از پایگاه داده رابطهای (Relational Database) بارگذاری میکنید، بهتر است عملیات پاکسازی پایهای را در همان کوئری انجام دهید.
برای مثال:
جایگزینی مقادیر NULL
حذف فاصلههای غیرضروری
حذف یا جایگزینی کاراکترهای خاص
این روش سریعتر از انجام این کارها در Integration Services است، چون در SSIS باید از Expressionها استفاده کرده و داده را Block کنید.
Fast Load
اگر جدول مقصد از Fast Load پشتیبانی میکند، حتماً از آن استفاده کنید.
در OLE DB Destination گزینهای به نام Table or View – Fast Load وجود دارد که باید انتخاب شود.
پرهیز از استفاده از Blocking Transformation
با در نظر گرفتن تمام موارد مطرحشده در SSIS Best Practices، متوجه میشویم که همواره جایگزینهایی برای Blocking Transformationها پیشنهاد شدهاند.
همیشه از استفاده از Blocking و Asynchronous Transformations خودداری کنید، چون آنها به حافظه وابسته هستند و عملکرد را کاهش میدهند.
Checkpoints (نقاط بازیابی)
برای پیگیری موفق یا ناموفق بودن تسکها، از Checkpoints استفاده کنید.
همیشه ویژگی SaveCheckpoints را برای هر Task روی مقدار True تنظیم کنید.
به این ترتیب، در صورت شکست در اجرای بسته، اجرای مجدد از همان نقطه شکست آغاز میشود، نه از ابتدا.
Default Buffer Size (اندازه پیشفرض بافر)
مقدار DefaultBufferSize و DefaultBufferMaxRows را متناسب با نیاز پروژه تغییر دهید.
مقدارهای مختلف را امتحان کنید تا به ترکیب بهینه برسید، اما به یاد داشته باشید که ویژگی AutoAdjustBufferSize باید بهدرستی تنظیم شود.
Process Bar (نوار وضعیت اجرا)
در زمان اجرای Package، حتماً Progress Bar را بررسی کنید. این نوار اطلاعات مفیدی در اختیار شما قرار میدهد که میتواند به بهبود عملکرد کمک کند.
برای مثال، هشدارهایی دربارهی ستونهای غیرضروری را نمایش میدهد.
دیدگاهتان را بنویسید