پست‌ها

نمایش پست‌هایی با برچسب Tips

نکات شرینک کردن فایل های دیتابیس در SQL Server

تصویر
با ايده گرفتن از Arik Poznanski نتيجه گيريم رو از شرينك كردن فايل هاي ديتابيس اول مينويسم «شرينك كردن در صورت نياز» ما دو نوع شرينك كردن داريم شرينك كردن ديتا فايل (خيلي بد) شرينك كردن لاگ فايل (بد) يه سري مفاهيم اوليه در شرينك هست كه در هر دو نوع شرينك ثابته اول اين مفاهيم رو مرور كنيم. وقتي فايل هاي ديتابيس ميخوان بزرگ بشن بر اساس Autogrowth ي كه ست كرديد اون مقدار مورد نظر براي اطمينان از نداشتن بد سكتور بايد zero byte فرمت بشه حال فرض كنيد رشد بانك به صورت درصدي باشه (كه به صورت پيشفرض هست) و ديتابيس شما گيگا بايتي باشه چه حجم زيادي بايد zero byte فرمت بشه و اين يعني افت Performance. البته خبر خوب اينه كه عمل بزرگ شدن فايل از SQL Server 2005 به بعد فقط براي ديتا فايل با zero byte فرمت انجام نميشه ( Instant File Initialization ).همه اينا رو گفتم تا برسم به اينجا كه بزرگ شدن فايل يه عمليات زمانبريه پس اگه شما از نظر حجم Storage مشكلي نداريد تا جاي كه امكان داره فايلهاي ديتابيستون رو شرينك نكنيد. چرا شرينك كردن ديتا فايل خيلي بده! وقتي شما ديتا فايلتون رو ...

استفاده از Hotmail در SQL Server Database Mail

تصویر
نداشتن بكاپ در يك سازمان باعث فاجعه ميشه.اوايل گزينه مد نظرم براي چك كردن Job مربوط به بكاپ گرفتن استفاده از Notifications خود SQL Server و ارسال ايميل بود ولي يه مشكل كوچيك اين وسط بود نداشتن Mail Server در سازمان. تا قبل از اينكه اين مطلب رو بنويسم فكر ميكردم بايد حتما داخل سازمان خودمون Mail Server داشته باشيم.اين برداشت من داخل كلاس بود.اينم مدركش (به احتمال زياد من مطلب رو بد گرفته بودم!) با اين فكر غلط هروز صبح بايد اين كوئري رو اجرا ميكردم SELECT CAST(CONVERT(DATETIME , CAST(run_date AS CHAR(8)) , 101) AS CHAR(11)) AS 'Failure Date' , SUBSTRING(T2.name , 1 , 100) AS 'Job Name' , T1.step_id AS 'Step #' , T1.step_name AS 'Step Name' , T1.message AS 'Message' FROM msdb..sysjobhistory T1 JOIN msdb..sysjobs T2 ON T1.job_id = T2.job_id WHERE T1.run_status != 1 AND T1.step_id != 0 AND run_date >= CONVERT(CHAR(8) , ( SELECT ...

دي كامپايل كردن اسمبلي هاي CLR

هنگام Deploy كردن پروژه SQL CLR در SQL Server اسمبلي مربوطه در VIEW ي sys.assembly_files ذخيره ميشه. SELECT * FROM sys.assembly_files بصورت پيش فرض براي كمك در ديباگ كردن گزينه Deploy Code فعاله و سورس كد شما هم تو ديتابيس ذخيره ميشه.خوب براي ديدن سورس اسمبلي مورد نظر كافيه اونو Cast كنيم به VARCHAR(max) و تمام. SELECT CAST(content AS VARCHAR(max)) FROM sys.assembly_files ولي اگه گزينه Deploy Code رو غير فعال كنيم فقط Dll مربوطه تو ديتابيس ذخيره ميشه و … براي اين مورد كافيه ما Dll رو داشته باشيم و با .NET Reflector به سروس برسيم. و اما نكته اينه كه چجوري به Dll برسيم بعد سرچ به اين كد رسيدم (CLR Procedure) كه مياد Dll ذخيره شده تو ديتابيس رو داخل ديسك ذخيره ميكنه. using System; using System.IO; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; using System.Security.Permissions; namespace ExtractSqlAssembly { [PermissionSet(SecurityAction.Demand, Unrestricted = true,...

چندين نكته هنگام استفاده از تابع AVG در SQL SERVER

هنگام استفاده از تابع تجميعي AVG ممكنه با ارور زير مواجه بشيد Arithmetic overflow error converting expression to data type int. اين مشكل معمولا در مواقعي كه تعداد ركورد ها زياد باشن پيش مياد. تابع AVG برا اساس نوع ستوني كه روش داره كار ميكنه خروجي رو تعيين ميكنه.براي مثال اگه ستون شما INT باشه خروجي هم INT ميشه و مثل COUNT_BIG نيست كه خروجيش از نوع  BIGINT باشه.حال اگه مقدار خروجي بشتر از مقدار INT باشه ارور بالا صادر ميشه. براي رفع ميايم ورودي رو به BIGINT تبديل ميكنيم و تمام. AVG(cast(innerResult.DiffTime AS BIGINT)) AS [avgTime] مورد بعدي اينه كه تابع AVG از مقادير NULL چشم پوشي ميكنه فقط ممكنه با مشكل خروجي NULL مواجه بشيد توجه كنيد تابع AVG ميتونه مقدار NULL برگردونه بجاي صفر(البته منطقي هم هست). براي رفع مشكلاتي از اين دست در LINQ خوندن + و + پيشنهاد ميشه. و اما در SQL ميشه از روش زير استفاده كرد SELECT ISNULL(AVG(3+3+3+NULL),0)

نكاتي براي بهينه سازي Visual Studio 2010 – قسمت سوم

تصویر
در قسمت اول و دوم بيشتر نكاتي كه عنوان شد مربوط به بهينه سازي خود IDE بود در اين پست(بخش آخر 2 پست قبلي) نكاتي رو كه باعث بالارفتن سرعت Build شدن پروژه ميشه رو برسي ميكنيم   1-تعداد پروژه هاي كه بصورت همزمان(موازي) Build بشن رو افزايش بديد از مسير Tools > Options > Projects and Solutions قسمت Build and Run عدد maximum number of parallel builds رو افزايش بديد(عدد خاصي رو نميشه پيشنهاد داد. بستگي داره.من رو 8 گذاشتم) 2-ميزان(سطح) verbosity رو كاهش بديد از مسير Tools > Options > Projects and Solutions قسمت Build and Run مقدار MSBuild project build output verbosity رو روي Quiet بزاريد 3-اسكن فايلهاي با پسوند OBJ, LIB, ILK, PDB رو از AntiVirus تون خارج كنيد 4-براي پروژهاتون از يك فولدر يكسان استفاده كنيد براي مثال براي Debug روي نام پروژه راست كليك كنيد و از تب Build قسمت Output Path 5-مقداري رو كه در مورد بالا براي Output Path ست كرديد ميتونه يك فولدر رو يك درايو مجازي روي رم باشه + 6-اگه مورد 4 رو انجام داديد ميتونيد Copy Local = Fal...

نكاتي براي بهينه سازي Visual Studio 2010 – قسمت دوم

تصویر
در ادامه پست   قبلي نكات زير هم ميتون كار با Visual Studio رو براي شما راحتر كنن 1-پروژه هاي رو كه در حال حاضر كاري روشون انجام نميديد رو Unload كنيد با راست كليك كردن رو نام پروژه گزينه Unload رو كيك كنيد 2-اگه رو فايل هاي پروژه خارج از Visual Studio كار نميكنيد متوجه شدن تغييرات خارج  از Visual Studio روي  فايل ها رو غير فعال كنيد از مسير Tools > Options > Environment > Documents تيك Detect when file is changed outside the environment رو برداريد 3-تو فولدر solution تون فايل مخفي با اكستنشن suo وجود داره كه options مربوطه به solution مربوطه داخلش ذخيره ميشه.پاكش كنيد تا سرعت لود شدن رو احساس كنيد   4-مانع اسكن شدن فولدرهاي مرتبط با Visual Studio بوسيله Antivirus بشيد (Exclude) 5-مورد بالا رو براي پراسس devenv.exe انجام بديد 6-از ايندكس شدن فولدرهاي پروژتون جلوگيري كنيد   7-در صورتي كه روي پروژه ويندوز فرمي كار ميكنيد قبل از بستن solution فرم هاي باز رو ببنديد 8-فرم ها رو تو پروژه ه...

نكاتي براي بهينه سازي Visual Studio 2010 – قسمت اول

تصویر
يكي از مشكلاتي كه تو نسخه 2010  نرم افزار Visual Studio خيلي محسوسه كندي اونه در ادامه چندين نكته كه ميتونه اين كندي رو كاهش بده ليست شده   1-حتما سرويس پك 1 رو نصب كنيد +   2-اگه OS تون 32 بيتيه و بيش از 2 گيگ رم داريد اين پست رو ببينيد   3-splash screen آغازين Visual Studio رو غير فعال كنيد (تستي كه خودم انجام دادم حدودا 7 ثانيه فرقش شد!!!) "C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe" /nosplash   4-صفحه آغازين Visual Studio  رو خالي قرار بديد از مسير Tools > Options > Environment > Startup مقدارShow empty environment  رو ست كنيد   5-اگه از سورس كنترلرTeam Foundation استفاده نميكنيد (توجه كنيد SVN تو اين بخش ليست نميشه پس نگران نباشيد) از مسير  Tools > Options > Source Control مقدار None رو ست كنيد   6-تو نسخه جديد  Visual Studio كه با WPF طراحي شده به صورت پيش فرض براي نمايش صفحات از hardware rendering استفاده ميشه  و اگه VGA شما مشكل داشته ...

كار كردن با نوع Xml در linked server

هنگام كار كردن با Linked Server اگر جدول شما شامل ستوني از جنس Xml باشه كوئري زير SELECT T.ID , T.Name FROM [10.0.1.3].RemoteDatabase.[dbo].[Tbl_Person_Remote] AS T INNER JOIN LocalDatabase.[dbo].[Tbl_Person_Local] ON T.ID = LocalDatabase.[dbo].[Tbl_Person_Local].ID باعث خطاي زير ميشه Xml data type is not supported in distributed queries. براي رفع اين مشكل 2 راه  وجود داره   1-ساختن يك View در سرور ريموت كه شامل اون ستون Xml نباشه   2-استفاده از تابع OPENQUERY SELECT T.ID , T.NAME FROM OPENQUERY([10.0.1.3] , 'SELECT T.ID ,T.Name FROM RemoteDatabase.[dbo].[Tbl_Person_Remote]') AS T INNER JOIN LocalDatabase.[dbo].[Tbl_Person_Local] ON T.ID = LocalDatabase.[dbo].[Tbl_Person_Local].ID توجه كنيد من تو Select ام اون ستوني رو كه از جنس Xml هست ندارم در صورت نياز بايد اون ستون رو Cast يا Convert كنيد به NVARCHAR(max) مشكل ديگه اي كه ممكنه تو كوئري هاي از اين دست به اون بر بخوريد (Distributed Queries)...

جستجوي كاراكترهاي ويژه در SQL SERVER

در عبارت هاي جستجو كاراكترهاي خاصي وجود دارند كه به آنها wildcard ميگن يا كاراكترهاي جايگزين شونده حالا مشكلي كه در تمام عبارت هاي جستجو با اون روبرو هستيم جستجو كردن همون wildcard هاس فرض كنيد ميخواهيد كوئري بنويسيد كه تمامي  ركورد هاي كه شامل % هست رو برگردونه شايد اول روشي كه به فكر برسه  تكرار 2 باره % تو عبارت جستجو باشه ولي اين روش جواب نميده SELECT * FROM myTable WHERE myField LIKE '%%%%' در Sql Server  به 2 روش ميشه اين كار رو انجام داد استفاده از كروشه [] SELECT * FROM myTable WHERE myField LIKE '%[%]%' استفاده از عملگر ESCAPE SELECT * FROM myTable WHERE myField LIKE '%!%%' ESCAPE '!' تو اين روش با كاراكتر بعد از حرف ESCAPE (در اينجا !) مثل يك حرف معمولي رفتار ميشه نه wildcard  يا كاراكترهاي جايگزين شونده منابع: + و +

باگ Remember Password در SSMS

تصویر
بعد از زدن تيك remember password در صفحه connect to server مشكل زير برام پيش ميومد   بعد از سرچ كردن متوجه شدم اين مشكليه كه از ورژن 2005  تو ssms هست .فقط چند نمونه از گزارش  اين مشكل  +   و  +   روشي رو اينجا معرفي كردن كه اين روش موقته و بعد از چند بار لاگين كردن به حالات اول برميگرده C:\Documents and Settings\[USERNAME]\Application Data\Microsoft\Microsoft SQL Server\100\Tools\Shell تو اين روش تمام history  سرور ها و … تو پنجره connect to server پاك ميشن توجه:تمامي تنظيمهاي شما تو SSMS پاك ميشه پس لازمه بعد از اين كار از آدرس زير دوباره تنظيمات رو اعمال كنيد Tools -> Options خوب ايناي كه گفتم نتيجه جستجوي من بود ولي خودم بعد از سعي و خط متوجه شدم دليل اين مشكل چيه(شايد اين باشه حداقل براي من دليلش اين بود) اين مشكل زماني بوجود مياد كه شما براي يك سرور چندين لاگين داريد  وبعد از زدن تيك remember password در صفحه connect to server اين مشكل بوجو مياد با استفاده از برنامه SC-PassUnleash متوجه شدم SSMS موق...

چند نکته برای بهینه سازی رویه های ذخیره شده

در این پست نکات کوچیکی  لیست شده که با توجه به اونا میتونیم سرعت اجرا شدن SP هامون رو افزایش بدیم NOCOUNT رو فعال کنیم همونطور که میدونید اسکیوال سرور با هر دستور Select و دستورات DML تعداد رکوردهای رو که تحت تاثیر اون دستور قرار گرفتن رو برمیگردونه این تعداد رکورد تحت تاثیر قرار گرفته برای دیباگ کردن کد میتون کارآمد باشه ولی بعد اون بی استفاده میشه با توجه به اینکه SP میتونه شامل چندین دستور مختلف باشه غیر فعال کردن این ویژگی میتونه کارائى رو افزایش بده CREATE PROC dbo.ProcName AS SET NOCOUNT ON; --دستورات در این قسمت SELECT column1 FROM dbo.TblTable1 -- فعال کردن ویژگی تعداد رکورد تحت تاثیر قرار گرفته SET NOCOUNT OFF; GO استفاده از اسکیما (schema) در کنار نام اشیاء نام اسکیما باید با نام SP و تمام اشایی که داخل SP به آنها ارجاع شده استفاده بشه.این کار باعث مشیه اسکیوال مستقیما  پلن کامپایل شده(complied plan) رو پیدا و استفاده کنه بجای اینکه دنبال اون اشیاء تو اسکیما های دیگه بگرده و در صورت وجود از پلن کامپایل شده(complied plan) استفاده کنه.این جستجوها برا یافتن اشیاء د...

برداشتن محدوديت 2 گيگ رم براي Visual Studio

تصویر
همونطور كه ميدونيد Visual Studio از منابع زيادي استفاده ميكنه مخصوصا اگه شما solution بزرگ ي داشته باشيد و از افزونه ها هم استفاده كنيد مثل ReSharper و… در اين مواقع و بعد از مدتي كار در محيط Visual Studio هنگام كامپايل كردن برنامه ممكنه با ارور Not enough storage is available to complete this operation. مواجه شيم. شايد تصور اين باشه كه با ارتقا سخت افزار اين مشكل حل شه ولي اين يك مشكل نرم افزاري هست و هم در OS هاي 32 و 64 اين مشكل رو داريم. و اما براي رفع 2 كار رو بايد انجام بديدم قرار دادن سويچ 3GB/ در فايل boot.ini ( اطلاعات بيشتر ) با رفتن به اين شاخه C:\Program Files\Microsoft Visual Studio 8\Common7\IDE و اجراي دستور زير در Command Prompt editbin /LARGEADDRESSAWARE devenv.exe در آخر ريستارت كردن PC فرامشو نشه. اين نتيجه كار منبع