ورود

View Full Version : خراب شدن دیتابیس بعد از هنگ کردن



سعید صابری
جمعه 11 مرداد 1392, 02:34 صبح
با سلام خدمت دوستان

من برای تست تعداد زیادی رکورد در جدول اینسرت کردم حدود 500000 رکورد بیش از 10 دقیقه طول کشید مجبور شدم managerببندم (IbEexpert,falamerobin) . وقتی خواستم دوباره به دیتابیس وصل بشم با کمال تعجب پیغام داد که قادر به باز کردن نیست. تنها manager که تونست حدود 300000 رکورد درج کنه EMS بود .
در حالی که mysql حدود 3-5 ثانیه این کوئری را انجام داد.

FB نسخه 2.5 x64
نظر دوستان چیه؟

khorsandreza
جمعه 11 مرداد 1392, 04:37 صبح
معمولا هروز اتفاق نمی افته که شما 1000000 رکورد را وارد کنید و ضمننا درج اطلاعات به شاخص گذاری هم بستگی دارد من در InterBase اطلاعاتی در حدود دوازده میلیون رکورد را دارم و هر ماه حدود 300الی 400 هزار رکورد اضافه میشه از لحاظ سرعت دسترسی مشکلی ندارم ولی حرف شما را نیز قبول دارم اگر بخواهم این مقدار اطلاعات مجددا در دیتابیس دیگری اضافه کنم زمان بیش از 6 ساعت را طلب خواهد کرد ولی مگر این کار را چند بار در سال انجام می دیم خوشبختانه سرعت بکاپ گیری و ریستور کردنش مطلوب است 10 الی 15 دقیقه است برای دیتابیسی که بیش از 6GB است خوبه ولی انصافا نسبت به نصب اسکیول سرور (جائی که کاربر ضعیف است) خیلی خوب است من ازش راضی هستم با بیش از 120 کاربر همزمان کار می کنند .

سعید صابری
جمعه 11 مرداد 1392, 05:09 صبح
خوبه ولی انصافا نسبت به نصب اسکیول سرور (جائی که کاربر ضعیف است) خیلی خوب است من ازش راضی هستم

من الان حدود 4 -5 سال است mysql کنم.FB یک سری چیزهایی داره که نظرم جلب کرده...
من قصد مقایسه اون دارم با Mysql. و کلا بحث sql server جداست. الان هم در حال تست FB هستم دنبال این جواب هستم آیا واقعا سرعت FB همین اندازه است؟ یا کار من مشکل داره؟
mysql تقریبا 4 ثانیه یک کوئری انجام میده ولی FB بالاتر از 33 ثانیه.

khorsandreza
جمعه 11 مرداد 1392, 14:45 عصر
من یکی از دوستانم با فایربرد و لازاروس برای یکی اموسسات سیستم طراحی کرده که محاسبات دقیق مالی را انجام می ده منهای کوئرهائی تولید می کنه لازم داره همه اطلاعات را بلافاصله در یک جدول اضافه Insert کنه برای مقایسه ! بنا بگفته خودش 100 یا 120 هزار رکورد میشه در زمانی کمتر از 3 ثانیه اتفاق می افته من دقیقا پست شماره یک شما را بهش فرستادم گفت بعید میدونه این مقدار رکورد این زمان را ببره و حالا گفته تست میکنه میگه .
من از سال 1381 با Interbase 5.5 کار را شروع کردم و چهار پنج نرم افزار با همین پایگاه داده انجام دادم (حالا با نسخه 7.1 کار می کنم) و همین حالا هم دارم دیتابیس که پست قبلی اشاره کردم با کمی تغییرات در حال انتقال به فایر برد هستم خوشحال می شم از تجربیات همدیگه استفاده بکنیم

BORHAN TEC
شنبه 12 مرداد 1392, 02:27 صبح
سلام
مسائل متعددی میتونه باعث بروز این مسئله میشه. لطفاً فایل پایگاه داده خالی را به همراه کوئری ای که اجرا می کنید برای بررسی بیشتر ضمیمه کنید.
در حالت کلی چند مسئله حائز اهمیته. اول اینکه در صورتی که نیازه داده های زیادی با هم وارد دیتابیس بشه بهتره که از array dml استفاده بشه. دوم اینکه اگر فیلدی ایندکس داره قبل از اضافه کردن مقدار زیادی داده بهتره که ایندکس اون رو برداریم و بعد از اینکه داده ها رو اضافه کردیم سپس ایندکس رو برگردونیم. (این موارد رو قبلاً توی راهنمای FireDac خوانده بودم).

همچنین خوندن این صفحه رو هم پیشنهاد می کنم:
http://www.da-soft.com/forums/anydac-general-english/firebird-2.1-and-array-dml-2.html

سعید صابری
شنبه 12 مرداد 1392, 03:05 صبح
ممنون شاهین جان.
من دیتابیس خاصی ندارم دو جدول ساده با 3 تا فیلد مانند هم.یکیشون دارای دیتا یکی دیگه خام.دیتاهای جدول اینسرت کردم در جدول خالی.زیاد طول کشید مجبور شدم ببندم و... .جالب بود برام چه راحت دیتابیس خراب میشه و بعد هم ریکاوری نمیشه یا حداقلش من بلد نبودم.

فعلا در مرحله تست FB هستم هنوز با همدیگر کنار نیومدیم.اگه لطف کنی تست کنید که FB تعداد رکورد حدود 300 - 400 هزار چقدر اینسرت می کنه ممنون میشم.البته با یک اینسرت معمولی.

فکر کنم خودمون با نقاط قوت ضعف پی ببریم بهتر باشه تا از صفحات "کپی و پست!" موجود نت .

khorsandreza
شنبه 12 مرداد 1392, 03:30 صبح
فعلا در مرحله تست FB هستم هنوز با همدیگر کنار نیومدیم.اگه لطف کنی تست کنید که FB تعداد رکورد حدود 300 - 400 هزار چقدر اینسرت می کنه ممنون میشم.البته با یک اینسرت معمولی.
من پانصد هزار رکورد را با 80 فیلد متنی و عددی حدود 4 الی 6 دقیقه در رایانه های معمولی اگه سرور با کش بالا مثلا 8 مگا کمتر از 3 دقیقه ب استفاده از SP انجام می دم البته قبلا از روش دیگری استفاده می کردم زمان بیشتر می برد 20 الی 25 دقیقه میشد اکه خواستین کدهایش رابراتون بفرستم

BORHAN TEC
شنبه 12 مرداد 1392, 04:29 صبح
من پانصد هزار رکورد را با 80 فیلد متنی و عددی حدود 4 الی 6 دقیقه در رایانه های معمولی اگه سرور با کش بالا مثلا 8 مگا کمتر از 3 دقیقه ب استفاده از SP انجام می دم البته قبلا از روش دیگری استفاده می کردم زمان بیشتر می برد 20 الی 25 دقیقه میشد اکه خواستین کدهایش رابراتون بفرستم
اگه کدها رو قرار بدین خیلی بهتره. خوبیش اینه که یک تست یکسان میتونیم انجام بدیم و نتیجه رو همینجا قرار بدیم.

FB نسخه 2.5 x64
نظر دوستان چیه؟
سعید جان کاش میگفتی که از کدوم نسخه استفاده میکنی. Classic server یا super classic یا super server یا embedded؟

khorsandreza
شنبه 12 مرداد 1392, 09:44 صبح
در روش قدیمی به این شیوه عمل می کردم

Function CreateSqlSt:String;
Begin
Pstr := 'INSERT INTO MyTB(CESR,SERL,CSAB,FNAM,LNAM,PNAM,MNAM,SHNS,MTAV, DTAV,VAZE,VAZG,VAZM,MAZH,JENS,TABE,';
Pstr := Pstr+'KARF,DARJ,TAHM,MTAH,DRJM,DRJH,ARSM,ARSH,ZNEG ,ZNEK,HOGS,HSAZ,SMOS,SMAN,CMAS,ZMAS,TAHO,OLAD,OLCH ,VALD,';
Pstr := Pstr+'TKFL,CDSH,ZMAZ,JAYG,OZV,DOZV,DHAD,DIJD,DBAZ, DVAZ,DFOT,DEAD,DTAG,ENDR,ENMO,ENOM,ENMA,ENKH,DRM1, DRM2,';
Pstr := Pstr+'DRM3,HMEH,CODM,FLAG,HFLG,CODV,CODK,EMAS,CODR ,OZVK,OZVM,SAZM,HEDE,HZKF,ELAT,SAKH,CDRM,BIMV,HEKM ,TAFK,';
Pstr := Pstr+'SMOD,SJEB,STAD,SASH,SAZD,SSRB,SBSJ,SDLT,SNOD ,SFAR,SZEN,SENT,SBKR,SMBH,NIRO,TAR,OS_CODE,';
Pstr := Pstr+'VAZEYAT,YEGM,MHLP,CKAN,DBAZ1,DTAV1,DOZV1,CHK ,PK_ID) Values(';
PStr := PStr+'"'+ADO_IN300CESR.AsString +'",';
PStr := PStr+'"00",';
PStr := PStr+'"'+ADO_IN300CSAB.AsString +'",';
PStr := PStr+'"'+GetreplChar(ADO_IN300FNAM.AsString) +'",';
PStr := PStr+'"'+GetreplChar(ADO_IN300LNAM.AsString) +'",';
PStr := PStr+'"'+Copy(ADO_IN300PNAM.AsString,1,10) +'",';
PStr := PStr+'"'+ADO_IN300MNAM.AsString +'",';
PStr := PStr+'"'+ADO_IN300SHNS.AsString +'",';
PStr := PStr+'"'+ADO_IN300MTAV.AsString +'",';
PStr := PStr+'"'+ADO_IN300DTAV.AsString +'",';
PStr := PStr+'"'+ADO_IN300VAZE.AsString +'",';
PStr := PStr+'"'+ADO_IN300VAZG.AsString +'",';
PStr := PStr+'"'+ADO_IN300VAZM.AsString +'",';
PStr := PStr+'"'+ADO_IN300MAZH.AsString +'",';
PStr := PStr+'"'+ADO_IN300JENS.AsString +'",';
PStr := PStr+'"'+ADO_IN300TABE.AsString +'",';
PStr := PStr+'"'+ADO_IN300KARF.AsString +'",';
PStr := PStr+'"'+ADO_IN300DARJ.AsString +'",';
PStr := PStr+'"'+ADO_IN300TAHM.AsString +'",';
PStr := PStr+'"'+ADO_IN300MTAH.AsString +'",';
PStr := PStr+'"'+ADO_IN300DRJM.AsString +'",';
PStr := PStr+'"'+ADO_IN300DRJH.AsString +'",';
PStr := PStr+'"'+ADO_IN300ARSM.AsString +'",';
PStr := PStr+'"'+ADO_IN300ARSH.AsString +'",';
PStr := PStr+'"'+ADO_IN300ZNEG.AsString +'",';
PStr := PStr+'"'+ADO_IN300ZNEK.AsString +'",';
PStr := PStr+ ADO_IN300HOGS.AsString +' ,';
PStr := PStr+'"'+ADO_IN300HSAZ.AsString +'",';
PStr := PStr+'"'+ADO_IN300SMOS.AsString +'",';
PStr := PStr+'"'+ADO_IN300SMAN.AsString +'",';
PStr := PStr+'"'+ADO_IN300CMAS.AsString +'",';
PStr := PStr+'"'+ADO_IN300ZMAS.AsString +'",';
PStr := PStr+'"'+ADO_IN300TAHO.AsString +'",';
PStr := PStr+'"'+ADO_IN300OLAD.AsString +'",';
PStr := PStr+'"'+ADO_IN300OLCH.AsString +'",';
PStr := PStr+'"'+ADO_IN300VALD.AsString +'",';
PStr := PStr+'"'+ADO_IN300TKFL.AsString +'",';
PStr := PStr+'"'+ADO_IN300CDSH.AsString +'",';
PStr := PStr+'"'+ADO_IN300ZMAZ.AsString +'",';
PStr := PStr+'"'+ADO_IN300JAYG.AsString +'",';
PStr := PStr+'"'+ADO_IN300OZV .AsString +'",';
PStr := PStr+'"'+ADO_IN300DOZV.AsString +'",';
PStr := PStr+'"'+ADO_IN300DHAD.AsString +'",';
PStr := PStr+'"'+ADO_IN300DIJD.AsString +'",';
PStr := PStr+'"'+ADO_IN300DBAZ.AsString +'",';
PStr := PStr+'"'+ADO_IN300DVAZ.AsString +'",';
PStr := PStr+'"'+ADO_IN300DFOT.AsString +'",';
PStr := PStr+'"'+ADO_IN300DEAD.AsString +'",';
PStr := PStr+'"'+ADO_IN300DTAG.AsString +'",';
PStr := PStr+'"'+ADO_IN300ENDR.AsString +'",';
PStr := PStr+'"'+ADO_IN300ENMO.AsString +'",';
PStr := PStr+'"'+ADO_IN300ENOM.AsString +'",';
PStr := PStr+'"'+ADO_IN300ENMA.AsString +'",';
PStr := PStr+'"'+ADO_IN300ENKH.AsString +'",';
PStr := PStr+'"'+ADO_IN300DRM1.AsString +'",';
PStr := PStr+'"'+ADO_IN300DRM2.AsString +'",';
PStr := PStr+'"'+ADO_IN300DRM3.AsString +'",';
PStr := PStr+'"'+ADO_IN300HMEH.AsString +'",';
PStr := PStr+'"'+ADO_IN300CODM.AsString +'",';
PStr := PStr+'"'+ADO_IN300FLAG.AsString +'",';
PStr := PStr+'"'+ADO_IN300HFLG.AsString +'",';
PStr := PStr+'"'+ADO_IN300CODV.AsString +'",';
PStr := PStr+'"'+ADO_IN300CODK.AsString +'",';
PStr := PStr+'"'+ADO_IN300EMAS.AsString +'",';
PStr := PStr+'"'+ADO_IN300CODR.AsString +'",';
PStr := PStr+'"'+ADO_IN300OZVK.AsString +'",';
PStr := PStr+'"'+ADO_IN300OZVM.AsString +'",';
PStr := PStr+'"'+ADO_IN300SAZM.AsString +'",';
PStr := PStr+'"'+ADO_IN300HEDE.AsString +'",';
PStr := PStr+'"'+ADO_IN300HZKF.AsString +'",';
PStr := PStr+'"'+ADO_IN300ELAT.AsString +'",';
PStr := PStr+'"'+ADO_IN300SAKH.AsString +'",';
PStr := PStr+'"'+ADO_IN300CDRM.AsString +'",';
PStr := PStr+'"'+ADO_IN300BIMV.AsString +'",';
PStr := PStr+'"'+ADO_IN300HEKM.AsString +'",';
PStr := PStr+'"'+ADO_IN300TAFK.AsString +'",';
PStr := PStr+'"'+ADO_IN300SMOD.AsString +'",';
PStr := PStr+'"'+ADO_IN300SJEB.AsString +'",';
PStr := PStr+'"'+ADO_IN300STAD.AsString +'",';
PStr := PStr+'"'+ADO_IN300SASH.AsString +'",';
PStr := PStr+'"'+ADO_IN300SAZD.AsString +'",';
PStr := PStr+'"'+ADO_IN300SSRB.AsString +'",';
PStr := PStr+'"'+ADO_IN300SBSJ.AsString +'",';
PStr := PStr+'"'+ADO_IN300SDLT.AsString +'",';
PStr := PStr+'"'+ADO_IN300SNOD.AsString +'",';
PStr := PStr+'"'+ADO_IN300SFAR.AsString +'",';
PStr := PStr+'"'+ADO_IN300SZEN.AsString +'",';
PStr := PStr+'"'+ADO_IN300SENT.AsString +'",';
PStr := PStr+'"'+ADO_IN300SBKR.AsString +'",';
PStr := PStr+'"'+ADO_IN300SMBH.AsString +'",';
PStr := PStr+'"'+ADO_IN300NIRO.AsString +'",';
PStr := PStr+'"'+ADO_IN300TAR.AsString +'",';
PStr := PStr+'"'+Copy(ADO_IN300CSAB.AsString,1,2)+'00' +'",';
PStr := PStr+'"'+ADO_IN300VAZE.AsString+ADO_IN300VAZG.AsString+AD O_IN300VAZM.AsString +'",';
PStr := PStr+'"'+Copy(ADO_IN300YEGM.AsString,1,21) +'",';
PStr := PStr+'"'+Copy(ADO_IN300MHLP.AsString,1,11) +'",';
PStr := PStr+'"'+ADO_IN300CKAN.AsString +'",';
PStr := PStr+'"'+Copy(ADO_IN300DBAZ.AsString,1,4) +'",';
PStr := PStr+'"'+Copy(ADO_IN300DTAV.AsString,1,4) +'",';
PStr := PStr+'"'+Copy(ADO_IN300DOZV.AsString,1,4) +'",1,';
Result := PStr;
End;



ولی حالا با SP انجام می دم من چون اطلاعات را از طریق فایل اکسس دریافت می کنم و مجبورم رکورد برکورد به پایگاه داده اضافه بکنم


INSERT INTO MyTB(CESR,SERL,CSAB,FNAM,LNAM,PNAM,MNAM,SHNS,MTAV, DTAV,VAZE,VAZG,VAZM,MAZH,JENS,TABE,
KARF,DARJ,TAHM,MTAH,DRJM,DRJH,ARSM,ARSH,ZNEG,ZNEK, HOGS,HSAZ,SMOS,SMAN,CMAS,ZMAS,TAHO,OLAD,OLCH,VALD,
TKFL,CDSH,ZMAZ,JAYG,OZV,DOZV,DHAD,DIJD,DBAZ,DVAZ,D FOT,DEAD,DTAG,ENDR,ENMO,ENOM,ENMA,ENKH,DRM1,DRM2,
DRM3,HMEH,CODM,FLAG,HFLG,CODV,CODK,EMAS,CODR,OZVK, OZVM,SAZM,HEDE,HZKF,ELAT,SAKH,CDRM,BIMV,HEKM,TAFK,
SMOD,SJEB,STAD,SASH,SAZD,SSRB,SBSJ,SDLT,SNOD,SFAR, SZEN,SENT,SBKR,SMBH,NIRO,TAR,OS_CODE,
VAZEYAT,MHLP,PARD,NSBT,NSBG,NSBM,YEGM,CKAN,DBAZ1,D TAV1,DOZV1,PK_ID)
VALUES(:CESR,'00',:CSAB,:FNAM,:LNAM,:PNAM,:MNAM,:S HNS,:MTAV,:DTAV,:VAZE,:VAZG,:VAZM,
:MAZH,:JENS,:TABE,:KARF,:DARJ,:TAHM,:MTAH,:DRJM,:D RJH,:ARSM,:ARSH,:ZNEG,:ZNEK,
Cast(:HOGS as Double precision),:HSAZ,:SMOS,:SMAN,:CMAS,:ZMAS,:TAHO,:OL AD,:OLCH,:VALD,:TKFL,:CDSH,:ZMAZ,
:JAYG,:OZV,:DOZV,:DHAD,:DIJD,:DBAZ,:DVAZ,:DFOT,:DE AD,:DTAG,:ENDR,:ENMO,:ENOM,
:ENMA,:ENKH,:DRM1,:DRM2,:DRM3,:HMEH,:CODM,:FLAG,:H FLG,:CODV,:CODK,:EMAS,:CODR,
:OZVK,:OZVM,:SAZM,:HEDE,:HZKF,:ELAT,:SAKH,:CDRM,:B IMV,:HEKM,:TAFK,:SMOD,:SJEB,
:STAD,:SASH,:SAZD,:SSRB,:SBSJ,:SDLT,:SNOD,:SFAR,:S ZEN,:SENT,:SBKR,:SMBH,:NIRO,
:TAR,UDF_COPY(:CSAB,1,2)||'00',(:VAZE||:VAZG||:VAZ M),:MHLP,0,'00','00','00',
:YEGM,:CKAN,
udf_copy(:DBAZ,1,4),
udf_copy(:DTAV,1,4),
udf_copy(:DOZV,1,4),
0);

البته ابزاری غیر بصری که برای این کار استفاده می کنم کامپپوننت SqlDirect است میکنم
بشکل زیر
تصویر اولی زمان طراحی
تصویر دوم حین اجراء

tomalaki
شنبه 12 مرداد 1392, 13:39 عصر
من یه بار با استفاده از کدنویسی دلفی امتحان کردم. mysql توی 3-5 ثانیه اینزرت نکرد که! یادم نیست چه مقدار، اما فایر برد توی یک دقیقه بیشتر اینزرت کرده بود. من شنیدم 2-3 ثانیه توسط mysql توی لینوکس صورت میگیره نه ویندوز.

شاهین راست میگه، کد اینزرتی رو که استفاده کردین بگید تا مقایسه یکسان باشه.

کامروا
شنبه 12 مرداد 1392, 20:29 عصر
یک تست انجام دادم.

ثبت ۱ میلیون رکورد در جدولی دارای 2 فیلد ID و Name.

ساختار جدول :
CREATE TABLE test_table
(
ID int primary key,
NAME varchar(50)
)

MySQL 5.5.32
Firebird 2.5.1 super

نتایج :

زمان صرف شده ثبت ۱ میلیون رکورد:

در MySQL برابر با 38.25 ثانیه (خوبه انصافا)
در Firebird برابر با 831.04 ثانیه. چیزی حدود ۱۳ دقیقه.

زمان واکشی اطلاعات :
SELECT * FROM test_table

در MySQL برابر با 78 ثانیه.
در Firebird برابر با 138 ثانیه.

برای ثبت اطلاعات از SP استفاده کردم :

MySQL :
delimiter $$

CREATE PROCEDURE `sp_test`(IN start_val int, IN end_val int)
BEGIN
declare i int;
set i = start_val;
start transaction;
while i <= end_val DO
insert into test_table(id, name) values(i, concat('Name ', i));
set i = i + 1;
END while;
commit;
END$$

CALL sp_test(1, 1000000);

Firebird :
SET TERM ^ ;

CREATE PROCEDURE SP_TEST (START_VAL integer, END_VAL integer )
AS
declare variable i integer;
BEGIN
i = start_val;
while (i <= end_val) do
begin
insert into test_table(ID, NAME) values(:i,'Name '||:i);
i = i + 1;
end
END^

EXECUTE PROCEDURE sp_test(1, 1000000); commit;

این تست در سیستم عامل لینوکس انجام دادم.
برای هر دو RDBMS، از محیط Command Line استفاده کردم.

khorsandreza
شنبه 12 مرداد 1392, 21:26 عصر
به منظور تست واقعی همین حالا از طریق دستور SP شش میلیون رکورد را با ساختار زیر در مدت 183 ثانیه اضافه کردم ساختار ببینید تازه فایربرد نبود Interbase 7.1 بود
CREATE TABLE NewTestTB (
PKID Integer Not Null,
CESR VARCHAR(11),
SERL VARCHAR(2),
TAR VARCHAR(4),
CODC VARCHAR(9),
CODP VARCHAR(13),
CODV VARCHAR(13),
SHOB VARCHAR(4),
SHKH VARCHAR(4),
MHLV VARCHAR(6),
TARB VARCHAR(6),
TGHE VARCHAR(3),
MABG VARCHAR(9),
MKAS VARCHAR(9),
KOLB VARCHAR(9),
ALBV VARCHAR(9),
CODB VARCHAR(4),
SHOM VARCHAR(8),
NKS VARCHAR(30),
TKS VARCHAR(12),
OLAV VARCHAR(1),
VAZE VARCHAR(6),
SAZM VARCHAR(1),
CSAB VARCHAR(4),
MBG VARCHAR(9),
OS_CODE VARCHAR(4)
);

CREATE INDEX NewTestTBTAR_IDX ON NewTestTB(TAR);

CREATE INDEX NewTestTB_IDX ON NewTestTB(CESR, SERL, TAR);



شکل دستور افزودن


INSERT INTO NewTestTB(CESR,SERL,TAR,CODC,CODP,CODV,SHOB,SHKH,M HLV,TARB,TGHE,MABG,MKAS,KOLB,ALBV,CODB,SHOM,NKS,TK S,OLAV,VAZE,SAZM,CSAB,MBG,OS_CODE)
Select CESR,SERL,TAR,CODC,CODP,CODV,SHOB,SHKH,MHLV,TARB,T GHE,MABG,MKAS,KOLB,ALBV,CODB,SHOM,NKS,TKS,OLAV,VAZ E,SAZM,CSAB,MBG,OS_CODE From IN_200



که یک تریگر و یک GENERATOR نیر اکتیو بودند که GENERATOR ستون بنام PK_ID را بصور خودکار شماره گذاری می کند که آن ستون در اینسرت منظور نشده
این هم ساختار دیتابیس من است
CREATE DATABASE "localhost:E:\MVF.gdb" USER "SYSDBA" PASSWORD "masterkey" PAGE_SIZE 4096 ;

سعید صابری
شنبه 12 مرداد 1392, 22:41 عصر
سعید جان کاش میگفتی که از کدوم نسخه استفاده میکنی. Classic server یا super classic یا super server یا embedded؟

super server استفاده می کنم.

روش کامروا خوب نیست چون از حلقه استفاده کرده.من هم از همون روش khorsandreza (http://barnamenevis.org/member.php?73948-khorsandreza) استفاده کردم تنها فرقش این بود جدول من 2 فیلد داشت. زمان khorsandreza (http://barnamenevis.org/member.php?73948-khorsandreza) خیلی بهتر بوده

شاهین نوبت تست شماست.

khorsandreza
یک شنبه 13 مرداد 1392, 01:34 صبح
دوستان به یک مطلب دقت فرمودید مبحث PageSize من پایگاه داده را به ان صورت ساختم PAGE_SIZE 4096 ; هرچند کمی سایز دیتابیس نسبت PAGE_SIZE 1024 ; بزرکتر است ولی فکر می کنم (شاید هم اشتباه می کنم) سرعت Insert اطلاعات بیشتر است .
ضمننا فکر می کنم روش کامروا دقیقا همان کاری که ما انجام می دیم . بنظرم نباید چندان فرق داشته باشه
من گاها نیاز میشه رکورد به رکورد اطلاعاتی را بروز بکنم از روش
For Select PKID,Name from MyTB
استفاده میکنم سرعت خوبی دارم و حالا هم اعتقاد دارم بدون اندیکس گذاری سرعت کند میشه .

BORHAN TEC
یک شنبه 13 مرداد 1392, 12:43 عصر
سلام
من الان توی شرکت هستم و نمیتونم تست کنم. به نظر من باید از Clasic Server استفاده کنیدچون میتونه از چند cpu core استفاده کنه ولی Super Server به طور پیشفرض نمیتونه (برای این که این قابلیت رو فعال کنیم باید تنظیماتش رو از داخل فایل firebird.conf تغییر بدیم) و به خاطر همین کندتره. Super Server برای جاهایی خوبه که سرور ضعیف باشه. موقعی که یه زمان خوب برای تست پیدا کنم تستش میکنم ولی متاسفانه امروز نمیتونم. راستی یه نکته مهم دیگه هم وجود داره: اگه فایل پایگاه داده درون درایوی باشه که در موقعیت خارجی تره دیسک سخت باشه سرعت خوندن و نوشتن خیلی بالاتر میره(یعنی باید تا جایی که امکان داره از مرکز دیسک سخت دورتر باشه!)
یا حق...

کامروا
یک شنبه 13 مرداد 1392, 13:34 عصر
Super Server به طور پیشفرض نمیتونه (برای این که این قابلیت رو فعال کنیم باید تنظیماتش رو از داخل فایل firebird.conf تغییر بدیم) ..
آره شاهین جان ولی ظاهرا این فقط واسه ویندوزه.

توی لینوکس کلا CpuAffinityMask درون فایل firebird.conf کامنت شده و غیرفعاله.

tomalaki
یک شنبه 13 مرداد 1392, 14:47 عصر
دوستان، من با روش کامروا روی ویندوز 64 بیتی و با فایربرد 64 بیتی 2.5.2 و مای اسکیوال 5.5.24 امتحان کردم نتیجه اینزرت به شرح زیر هست:
یک میلیون اینزرت

مای اسکوال: 29.281 ثانیه
فایربرد: 23 ثانیه

حذف هم مای اسکوال: 8.90 ثانیه
فایربرد: 20.775 ثانیه ( تصحیح میشه: 10.860 ثانیه)

زمان فچ کردن فایر برد: 6.025

BORHAN TEC
یک شنبه 13 مرداد 1392, 16:06 عصر
توی لینوکس کلا CpuAffinityMask درون فایل firebird.conf کامنت شده و غیرفعاله.
برای تغییر تنظیمات پیش فرض باید این مشخصات رو از حالت کامنت شده خارج کنید(دقیقاً مثل تغییر پورت و ...). درسته این گزینه فقط برای ویندوزه. من الان لینوکس ندارم. میشه با نسخه کلاسیک هم تست کنی؟

سعید صابری
یک شنبه 13 مرداد 1392, 19:23 عصر
حلقه فکر نکنم مناسب برای تست باشه من با حلقه استفاده می کنم به راحتی اینسرت میشه ولی وقتی محتویات یک جدول در جدول دیگه اینسرت می کنم تعداد که زیاد باشه ibexpert با اون همه ادعاش هنگ کرد فقط EMS بدون دردسر انجام داد.البته من تنظیمات پیش فرض استفاده می کنم.


tomalaki (http://barnamenevis.org/member.php?104222-tomalaki) جان نگفتی چه تعداد رکورد اینسرت کردی؟

راستی دوستان چرا حجم فایل دیتابیس اینقدر زیاده؟ تنظیمات خاصی داره؟

tomalaki
یک شنبه 13 مرداد 1392, 20:42 عصر
حلقه فکر نکنم مناسب برای تست باشه من با حلقه استفاده می کنم به راحتی اینسرت میشه ولی وقتی محتویات یک جدول در جدول دیگه اینسرت می کنم تعداد که زیاد باشه ibexpert با اون همه ادعاش هنگ کرد فقط EMS بدون دردسر انجام داد.البته من تنظیمات پیش فرض استفاده می کنم.


tomalaki (http://barnamenevis.org/member.php?104222-tomalaki) جان نگفتی چه تعداد رکورد اینسرت کردی؟

راستی دوستان چرا حجم فایل دیتابیس اینقدر زیاده؟ تنظیمات خاصی داره؟

یک میلیون اینزرت کردم. حجم فایل فایربرد 75 مگ و مای اسکیوال 329 مگ هست.

سعید صابری
یک شنبه 13 مرداد 1392, 22:20 عصر
یک میلیون اینزرت کردم. حجم فایل فایربرد 75 مگ و مای اسکیوال 329 مگ هست.

جالبه من 5160960 شد 160 MB با Mysql.

نمیدونم چرا اینسرت که شما با FB انجام میدید سریعتر و کم حجم تر از منه.اما اینسرت های من با Mysql سریع تر و دیتابیس کم حجم تره!؟

BORHAN TEC
یک شنبه 13 مرداد 1392, 23:04 عصر
دیتابیس کم حجم تره!؟
بیشتر به خاطر تنظیمات PageSize هست.

سعید صابری
دوشنبه 14 مرداد 1392, 22:34 عصر
بیشتر به خاطر تنظیمات PageSize هست.

احسن حاجی.دقیقا به خاط همین دلیل بود. چون ساز بالا بود زود حجم دیتابیس بالا می رفت و باعث کندی و هنگ کردن میشد.

الان یک جدول دو فیلد یک فیلد Autoinc و یک فیلد از نوع کاراکتر تست کردم روی MYsql و fb.
fb شد حدود 27
mysql شد 12
تقریبا 1300000.

البته حجم دیتابیس Mysql نیز کمتر بود.

BORHAN TEC
سه شنبه 15 مرداد 1392, 01:00 صبح
fb شد حدود 27
mysql شد 12
باز هم نمیشه گفت که fb سرعتش کمتره. اگه کسی به تنظیمات fb مسلط باشه میتونه سرعتش رو به شکل دیوانه واری بالا ببره. من دارم یه تحقیقات درست و حسابی ای روی بالابردن کارایی fb انجام میدم و در همین امروز به نتایج خیلی خوبی رسیدم. دوست دارم که این توضیحات رو در قالب یک مقاله در مجله برنامه نویس(!) قرار بدم.
البته به نظر من دیگه نباید روی این موضوع حساس بشیم. فکر نمیکنم که موقعیتی وجود داشته باشه که ما مجبور بشیم 1 میلیون رکورد رو در کمتر از یک دقیقه در پایگاه داده قرار بدیم. از اینجا به بعد این بحث ها کاربرد تجاری نداره و بحث آکادمیکیه.(مگر اینکه بخواهیم نام و نام خانوادگی هر دونه ای از ذرات معلق در هوا رو با هم ثبت کنیم! :قهقهه: )

البته حجم دیتابیس Mysql نیز کمتر بود.
باز هم دلیل نمیشه و این مورد هم به تنظیمات بر میگرده. یه جاهایی بنا به دلایلی بهتره که PageSize بزرگ باشه و یه جاهایی نباید اینطوری باشه.

tomalaki
سه شنبه 15 مرداد 1392, 12:19 عصر
دوست دارم که این توضیحات رو در قالب یک مقاله در مجله برنامه نویس(!) قرار بدم.


لطفا یه مقاله هم برای امن کردن پایگاه داده روی وی پی اسی که قراره روی اینترنت قرار بگیره و پایگاه داده یک .بسایت و یک برنامه ویندوزی بشه هم قرار بدید.

کامروا
سه شنبه 15 مرداد 1392, 14:47 عصر
super server استفاده می کنم.

روش کامروا خوب نیست چون از حلقه استفاده کرده.من هم از همون روش khorsandreza (http://barnamenevis.org/member.php?73948-khorsandreza) استفاده کردم تنها فرقش این بود جدول من 2 فیلد داشت. زمان khorsandreza (http://barnamenevis.org/member.php?73948-khorsandreza) خیلی بهتر بوده
ببخشید سعید جون ولی من یکم گیج شدم ! :گیج:
چطوری بدون حلقه اطلاعات ثبت میکنی ؟ تا منم به روش شما تست کنم ...


میشه با نسخه کلاسیک هم تست کنی؟
با کلاسیک هم تست کردم فرقی نکرد.

یه چیز عجیب!
مثلا الان ۱ میلیون رکورد ثبت میکنم میشه ۸۰۰ ثانیه بعد دوباره ثبت میکنم میشه ۲۰۰ ثانیه ! دوباره ثبت میکنم میشه ۴۰۰ ثانیه !!!

چرا زمان ثبت اطلاعات، اینقدر بالا پایین میشه ؟!:متفکر:

tomalaki
چهارشنبه 16 مرداد 1392, 10:14 صبح
مثلا الان ۱ میلیون رکورد ثبت میکنم میشه ۸۰۰ ثانیه بعد دوباره ثبت میکنم میشه ۲۰۰ ثانیه ! دوباره ثبت میکنم میشه ۴۰۰ ثانیه !!!

چرا زمان ثبت اطلاعات، اینقدر بالا پایین میشه ؟!:متفکر:

چرا زمان های شما این همه بالا هست؟

SoheilZarian
چهارشنبه 12 فروردین 1394, 14:11 عصر
با سلام خدمت دوستان

Enable یا Disable بودن گزینه Forced Writes در تنظیمات بانک اطلاعاتی بر روی سرعت درج اطلاعات تاثیر داره و در بعضی منابع ذکر شده که Disable نمودن آن سرعت رو به میزان قابل توجهی بالا می بره ولی از طرف دیگه ریسک خرابی بانک اطلاعاتی افزایش پیدا می کنه و فقط در صورتی بایستی استفاده بشه که از سرور بسیار خوب و مطمئن استفاده بشه و در زمانهای متناسب پشتیبان اطلاعاتی تهیه بشه.

با توجه به عنوان تاپیک «خراب شدن دیتابیس بعد از هنگ کردن» فکر می کنم خراب شدن بانک اطلاعاتی در صورت ریست شدن و هنگ دستگاه بواسطه همین Disable شدن گزینه مذکور اتفاق افتاده باشه.

از طرف دیگه اندازه Page Size هم تاثیر داره البته بصورت قانون کلی گفته میشه که اگر در بانک اطلاعاتی و در جداول پر کاربرد رکوردهایی با طول بیشتر از 2048 بایت وجود داره نبایستی Page Size کمتر 2048 باشه.

من با Interbase 2009 کار می کنم که از نظر ثبات کار بهتر از ورژن های قبلی هست. در مواردی بانکهای اطلاعاتی که تحت ورژن های قبلی خراب شده بود، فقط با باز کردن توسط Interbase 2009 ریکاوری شد.