PDA

View Full Version : سوال: insert کردن سریع داده ها در دیتابیس از طریق سی شارپ



pirmard
سه شنبه 08 مرداد 1392, 15:49 عصر
سلام
خسته نباشید
برای پروژه ای ما نیاز به اینزرت کردن سریع اطلاعات به دیتابیس داریم.
جهت اینکه مقیاس بیاد دستتون سرعت مورد نیاز یه چیزی در حدود 20 هزار رکورد در ثانیه است.
در این مرحله جدا از پیشنهادات بهبودهای سخت افزاری و یا کلاسترینگ و ... دبنال سریعترین شیوه ی اینزرت کردن هستم.

به دلیل سرعت بالا، استفاده از انتیتی رو کلهم بیخیال شدم به دلیل سرباری که داره
خواستم ببینم برای کار با ado.net و اگزکیوت کردن کوئری راه حلی هست که بشه سرعتش رو افزایش داد؟
کلا بهترین و سریعترین روش اینزرت کردن چیه؟

ممنون

danialafshari
سه شنبه 08 مرداد 1392, 16:20 عصر
سلام
فکر کنم stored procedure یا همون SP کارت رو راه بندازه
CREATE PROCEDURE [dbo].[InsertTable_1]
@Name nvarchar(50),
@Price int,
@dt int
AS
BEGIN
SET NOCOUNT ON;
Insert Into Table_1
([Name],[Price],[dt])
Values
(@Name,@Price,@dt)
END
GO

pirmard
سه شنبه 08 مرداد 1392, 17:42 عصر
البته اینجا بیشتر منظورم سرعت پایین از سمت سی شارپ به سمت سرور اسکیوئل بود.

danialafshari
سه شنبه 08 مرداد 1392, 19:25 عصر
سلام

پر سرعت ترین راهی که میشناسم در حال حاظر با استفاده از SP هست


البته اینجا بیشتر منظورم سرعت پایین از سمت سی شارپ به سمت سرور اسکیوئل بود.

خب اگر مشکلتون C# هست پس چرا اینجا مطرح کردید؟

pirmard
چهارشنبه 09 مرداد 1392, 02:01 صبح
سلام

پر سرعت ترین راهی که میشناسم در حال حاظر با استفاده از SP هست



شما یه sp رو تو خود management studio به تعداد 10000 بار ران کنین و با اون اینزرت رو انجام بدین
زمان تقریبیش رو ببینین. مثلا میشه 10 ثانیه
حالا همون sp رو از طریق سی شارپ 10000 بار اگزکیوت کنین و زمان تقریبیشو مقایسه کنین.
این زمانها خیلی با هم تفاوت دارن. سوالم در واقع اینه که در سمت سی شارپ چه متدی کمترین سربار رو دارن ؟

tooraj_azizi_1035
چهارشنبه 09 مرداد 1392, 12:31 عصر
اگه از BULK INSERT (http://msdn.microsoft.com/en-us/library/ms188365.aspx)که راهی بسیار سریع هست نمی تونید استفاده کنید باید همه دستورات Insert تون داخل بلاک BEGIN TRANS و COMMIT باشه تا به ازای 20000 رکورد یک بار Log انجام شه نه 20 هزار بار.

pirmard
یک شنبه 13 مرداد 1392, 16:11 عصر
امکان استفاده از بالک اینزرت مقدور نبود چون سرعت چندان مناسبی هم نداره.
راهکار انتخابی استفاده از اینزرت بالک بود که تست شد و خوشبختانه مشکل حل شد. با سرعتی دست کم 10000 برابر حالت معمولی