PDA

View Full Version : سوال: تبدیل اطلاعات



khorsandreza
جمعه 16 مرداد 1388, 15:47 عصر
سلام
ضمن عرض تبریک میلاد آقا امام زمان
من با یک مشکل عجیبی روبر شدم دو تا دیتا بیس دارم یکی اکسس و دیگری اس کیو سرور 2005 است حال با استفاده از کامپوننت SMImport اطلاعات را از اکسس خوانده به داخل اسکیو سرور منتقل کنم از لحاظ خواند و نوشتن داخل بانک مشکلی ندارم از انجائی که حجم اطلاعات زیاد است (دو میلیون رکورد حدودا) ابتدا شروع سرعت انتقال قابل قبول است حدود 15 رکورد در ثانیه وقتی به 40 تا 50 هزار رکور میرسه سرهعت انتقال به 1 رکورد در ثانیه میرسه با توجه به اینکه من از هر 500 رکورد عملیات Commit انجام میدم مشکل چی هست سرعت انتقال کم میشود.

توضیح:
برنامه تبدیل با دلفی 7 نوشته شده است و کامپننوت خواندن و نوشتن داخل اس کیو سرور SqlDirct میباشد

حمیدرضاصادقیان
جمعه 16 مرداد 1388, 20:17 عصر
سلام. به نظر بنده بهتره از یک Sp استفاده کنید که داخل خود سرور کش بشه و هر بار نیازی به کامپایل اون نباشه. در ضمن از همون ado هم به نظر من استفاده کنید بهتره. اگر بتونید از sdac استفاده کنید که خیلی بهتره.سرعتش خیلی بالاست.ولی من همین کارو با ado انجام دادم و هیچ مشکلی هم نداشتم.
مثلا شما برای اضافه کردن داخل خود دیتابیس sp ایجاد کنید برای عملیات insert و فقط بهش مقدار رو پاس بدید. مقدار هم که با یک کانکشن دیگه میخونید و فقط اون sp رو صدا میزنید بعد execute میکنید. یا میتونید با استفاده از bulk copy اینکارو انجام بدید که سرعتش هم بالاتر بره.
موفق باشید.

khorsandreza
شنبه 17 مرداد 1388, 01:24 صبح
روش بلوک کپی برام مقدور نیست چون هر رکورد را کنترل میکنم اگه موجود باشه کار خاصی انجام بشه
ولی منظورتان را در مور کش شدن سرور متوجه نمیشم
ado را چک میکنم
ضمننا سوال
اگه از sp استفاده بشه نیازی به Commit کردن نیست؟

حمیدرضاصادقیان
شنبه 17 مرداد 1388, 08:40 صبح
سلام.نه وقتی شما از sp استفاده کنید برای هر مقدار یک بار اون پروسیجر صدا زده میشه و در آخر هم Execproc اجرا میشه. در داخل sql نیز در داخل sp شما یک دستور insert نوشتید و یک go که همون یک دستور را اجرا خواهد کرد.
منظور از کش کردن یعنی اینکه sp یکبار سمت سرور کامپایل خواهد شد و همیشه از همون پلن استفاده خواهد کرد که این سرعت کار شما رو افزایش خواهد داد.
موفق باشید.

mafazel
شنبه 17 مرداد 1388, 15:45 عصر
اگر بانک اکسس در دسترس تون باشه (پروژه سفارشی باشه) بهترین راه Import فایل اکسسه. در غیر این صورت صحبت های بالا کاملا درسته. ضمنا چرا برای خواندن و نوشتن توی اسکوال سرور از کامپوننت های خود دلفی استفاده نمی کنید؟
اسکیو ال سرور یه منوی Import داره. با ویزارد اون فایل Access رو بعنوان مبدا و بانک مورد نظر رو بعنوان مقصد بهش بدید. خودش سریعا ساختار مورد نیاز (جدول ها و فیلدها) رو میسازه و اطلاعات رو توی اونها قرار میده.
بعد یک سری تغییراتی رو که لازمه بدید. مثلا فیلد اصلی جداول را کلید (و Auto Increment) کنید.
و با یک سری دستورات اسکیوال فیلدهای مورد نظر (که اون شرط مورد نظر شما رو ندارند) حذف کنید و الی آخر.

vcldeveloper
شنبه 17 مرداد 1388, 17:07 عصر
ابتدا شروع سرعت انتقال قابل قبول است حدود 15 رکورد در ثانیه وقتی به 40 تا 50 هزار رکور میرسه سرهعت انتقال به 1 رکورد در ثانیه میرسه با توجه به اینکه من از هر 500 رکورد عملیات Commit انجام میدم مشکل چی هست سرعت انتقال کم میشود.

با کاهش سرعت، آیا میزان حافظه استفاده شده توسط برنامه هم بصورت تصاعدی بالا میره؟

khorsandreza
یک شنبه 18 مرداد 1388, 23:22 عصر
با کاهش سرعت، آیا میزان حافظه استفاده شده توسط برنامه هم بصورت تصاعدی بالا میره؟

جناب اقای کشاورز سلام
بنا بسفارش آقای صادقیان من روش را عوض کردم یک SP نوشتم که حدود 47 پارامتر ورودی دارد حال موقع انتقال اطلاعات سرعت خوبی دارد حدود 1500 رکورد در دقیقه ولی که در این مدت حافظه (تقریبا 98 درصد ) را اس کیور سرور اشغال میکنه یک وقفه 20 ثانیه کند میشه حافظه دو باره ازاد میشود و تکرار که در این فاصله در مدت زمان یک ساعت 20 دقیقه یکصد و پنجاه هزار رکورد منتقل میشود ولی احساس میکنم سرعت کار پائین چون برا انتقال دو میلیون رکورد زمانی حدود 10 ساعت یا بیشتر لازم است

اگه لازم باشه که برای راهنمائی بیشتر بنده و دیگر دوستان سورس برنامه میتوانم ارسال کنم

khorsandreza
یک شنبه 18 مرداد 1388, 23:27 عصر
اگر بانک اکسس در دسترس تون باشه (پروژه سفارشی باشه) بهترین راه Import فایل اکسسه. در غیر این صورت صحبت های بالا کاملا درسته. ضمنا چرا برای خواندن و نوشتن توی اسکوال سرور از کامپوننت های خود دلفی استفاده نمی کنید؟
اسکیو ال سرور یه منوی Import داره. با ویزارد اون فایل Access رو بعنوان مبدا و بانک مورد نظر رو بعنوان مقصد بهش بدید. خودش سریعا ساختار مورد نیاز (جدول ها و فیلدها) رو میسازه و اطلاعات رو توی اونها قرار میده.
بعد یک سری تغییراتی رو که لازمه بدید. مثلا فیلد اصلی جداول را کلید (و Auto Increment) کنید.
و با یک سری دستورات اسکیوال فیلدهای مورد نظر (که اون شرط مورد نظر شما رو ندارند) حذف کنید و الی آخر.

در مورد قسمت اول که فرموید ابزار های دلفی همین کار را هم کردم و سرعت مطلول نیست
ولی Import نمیخواهم بشه چون رکورد به رکورد باید کنترل بشه چود در یک جدول دیگه با ساختار متفاوت انتقال پیدا میکنه جوری است از یک تریگر نیز استفاده شده باید موارد دیگه نیز حین Insert و Update در جدول تغییرات ایجاد بشه

khorsandreza
دوشنبه 19 مرداد 1388, 13:36 عصر
اقای کشاورز سلام
این کار تبدیل را هر ماه یکبار باید انجام بگیره بار اول سرعت انتقال خوب بود ولی در بار دوم خسته کننده میشه از صبح شروع کرده که از 5,000,000 رکورد تا حالا فقط 56,000 رکورد منتقل شده (شش ساعت) شما روش سریعتری سراغ دارید؟
این اطلاعات را قبلا در فایل های DBF فاکس ارائه میشد سرعت خوبی داشت کل اطلاعات دو میلیون رکورد را در سه جهار ساعت تبدیل میکرد که ان موقع یک کار اضافه دیگه تبدیل کد پیج از داس به ویندوز هم بود حالا جدید فایل تبدیل شده را تحت اکسس ارائه میدن بابت تبدیل به مشکل بر خورده کردم

khorsandreza
سه شنبه 20 مرداد 1388, 01:50 صبح
سلام
دوستان این مشکل هنوز پا بر جاست پیشنهاد راه حلی نظر خاص اگه باشه چشم به انتظاریم