View Full Version : انتقال پراسس sql server 2012 به درایو دیگر
mostafa02124
چهارشنبه 06 فروردین 1393, 19:13 عصر
با عرض سلام
من یک کوئری نوشتم که با توجه به جدولم طولش متغیره.بسته به تعداد کاراکترهای ورودی.پس از اجرای کوئری به دلیل حجم بسیار بالای خروجی( در ساده ترین حالت 7,000,000,000 رکورد) هر 33 میلیون رکورد 1 گیگ از فضای درایو C(دزایو اصلی ویندوز) رو اشغال میکنه و چون فضای کمی در این درایو دارم میخوام اگه بشه پردازش این رو منتقل کنم به درایو دیگه.هم دیتا بیس و هم کوئری رو از درایو دیگه دوباره اجرا کردم اما باز هم پردازش رو تو همون C انجام میده.
لازم به ذکره که sql server 2012 نمیذاره فایل های اصلیش در درایو دیگری جز درایو ویندوز ذخیره بشه مخصوصا وقتی ویندوز 64 بیت باشه باید در هر دو program files(x86) و Program files بریزه. ولی قسمت های عمومی و در واقع فرعی اش رو اجازه میده در درایو دیگه نصب کنم.کلی در اینترنت جستجو کردم.نتیجه ای حاصل نشد.
ممنون میشم راهنمایی کنید.
Parseinfo
یک شنبه 10 فروردین 1393, 14:51 عصر
اگر بتونی دیتابیس TempDB رو به درایو دیگه ای منتقل کنی فکر کنم مشکل حل بشه.
mostafa02124
دوشنبه 11 فروردین 1393, 10:10 صبح
اگر بتونی دیتابیس TempDB رو به درایو دیگه ای منتقل کنی فکر کنم مشکل حل بشه.
ممنون.ولی این کار رو هم انجام دادم.متاسفانه حداکثر مقداری که برای پردازش کوئری در نظر میگیره 2 گیگه که این مقدار به مگا بایت در تنظیماتش است و برای حجم بالاتر قابل تغییر نیست.امتحان کردم. وقتی 54 میلیون رکورد که میشه کلا هنگ میکنه.فکر کنم روش خوبی رو برای این کار انتخاب نکردم! و باید روش رو تغییر بدم.
Parseinfo
شنبه 16 فروردین 1393, 14:57 عصر
به هر حال پرس و جویی که بیش از یک میلیون رکورد رو برگردونه به درد نمی خوره چون تمام اون مثلا 54 میلیون رکورد رو که نمیشه یکجا دید باید در چند صفحه ی جدا مرور بشه بنابر این باید خروجی پرس و جو محدود بشه توی نسخه 2012 از offset و rows استفاده کن. مثلا اگر پارامتر هایی از قبیل تعداد رکورد در هر صفحه = @RecCount و شماره صفحه = @PageNumber رو به پروسیجر فراخواننده بفرستی با این خط کد می تونی به راحتی رکورد ها را مرور کنی و صفحه صفحه اونها رو به خروجی بفرستی:
Select * From Tbl Where .... Order by .... Offset (@RecCount *(@PageNumber-1)) Rows Fetch Next(@RecCount) Rows Only
حمیدرضاصادقیان
شنبه 16 فروردین 1393, 17:31 عصر
سلام.
ببینید در هر نسخه ای شما میتونید فایلهای دیتابیس و مسیر نصب رو تغییر بدید و ملزم به درایو C نیست.
از چه نسخه ای از 2012 استفاده می کنید؟؟
چه لزومی داره در ساده ترین حالت 7 میلیارد رکورد رو برگردونید؟؟؟؟
مگر چه کاری باید انجام بشه؟؟
کافیه قبل از اجرای دستور ، ابتدا Show Estimate Execution Plan رو انتخاب کنید تا Plan رو بهتون نشون بده.
بعد اونو ذخیره کرده اینجا قرار بدید.
mostafa02124
دوشنبه 18 فروردین 1393, 21:43 عصر
سلام.
ببینید در هر نسخه ای شما میتونید فایلهای دیتابیس و مسیر نصب رو تغییر بدید و ملزم به درایو C نیست.
از چه نسخه ای از 2012 استفاده می کنید؟؟
چه لزومی داره در ساده ترین حالت 7 میلیارد رکورد رو برگردونید؟؟؟؟
مگر چه کاری باید انجام بشه؟؟
کافیه قبل از اجرای دستور ، ابتدا Show Estimate Execution Plan رو انتخاب کنید تا Plan رو بهتون نشون بده.
بعد اونو ذخیره کرده اینجا قرار بدید.
اتفاقا تلاش زیادی کردم.نمیدانم شاید به خطر 64 بیتی بودن ویندوز الزام به ریختن بعضی از پوشه هایش به درایو C را دارد.
از نسخه Enterprise
تست سرعت تولید پسوردهای n رقمی با n کاراکتر نسبت به لینوکس و یک برنامه خاص و در انتها تولید Hash برای 5 گونه مختلف.
ممنون ولی با اینکه با save as plan به جای دیگه انتقال دادم باز هم مشکل حل نشد و هنوز درایو C پس از اجرا شروع به پر شدن میکنه.
tooraj_azizi_1035
سه شنبه 19 فروردین 1393, 13:24 عصر
سلام
مطمئن نیستم که با تغییر محل tempdb مشکل حل بشه ولی در 2012:
USE master ;
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = 'D:\tempdbdata\tempdb.mdf') ;
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = 'E:\tempdblogs\templog.ldf') ;
GO
باید تنظیمات مربوط به اندازه فایل tempdb و همینطور میزان افزایش اون رو تغییر بدید.
http://www.confio.com/logicalread/sql-server-tempdb-best-practices-initial-sizing-w01/
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.