• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
rollback یا abort خودکار ترنزکشن ها؟
#1
من اینجا سوال کردم اما کسی جوابی نداد: http://stackoverflow.com/questions/19925...-and-retry

کسی میدونه دقیقا منظور از این rollback یا abort خودکار ترنزکشن ها چیه و چطور باید در کد آشکارسازی کرد و بعدش چطوری چکار کرد؟
  پاسخ
تشکر شده توسط :
#2
ممکنه اطلاعاتم درست نباشه
تا جایی که می دونم در حالتی که autocommit برابر با ۱ باشه توی انجین هایی که ترنزکشن رو پشتیبانی می کنه زمانی که به صورت پیشفرض insert delete update زمانی که به صورت موفقیت آمیز اجرا شدن commit میشن حتی اگر شما role back کنی (نه زمانی که شما یه تراکنش رو شروع کردی) ولی وقت که autocommit رو برابر با صفر قرار بدی تا زمانی که commit نکنی اطلاعات در پایگاه داده نمیشینه. (حتی اگر ترنزکشنی رو شروع نکرده باشی)
  پاسخ
تشکر شده توسط : hamid_80386
#3
نه فکر نکنم منظور این بوده باشه.
چون اونکه مسئلهء ساده و روشن و در کنترل برنامه نویس است.

من سوالم درمورد نوع خودکار rollback و abort (حالا فرق بین این دوتا چیه باز خودش یه سواله) بود، که در رفرنس MySQL ازش بعنوان یک مشکل یاد میکنه.
میخواستم بدونم دقیقا منظورش چیه و این داستان در چه مواقعی ممکنه پیش بیاد، چطوری باید در کد اون رو آشکارسازی کنیم و وقتی آشکارسازی کردیم بعدش باید چطوری چه کنیم؟ (مثلا retry کنیم یا کار دیگه)
  پاسخ
تشکر شده توسط :
#4
جالب اینکه الان برحسب تصادف یه مقاله باز کردم و داشتم میخوندم که به مطلبی برخورد کردم که دیدم شاید همین قضیه ای باشه که در این تاپیک مطرح کردم.

Deadlocks

In some cases, two transactions may, in the course of their processing, attempt to access the same portion of a database at the same time, in a way that prevents them from proceeding. For example, transaction A may access portion X of the database, and transaction B may access portion Y of the database. If, at that point, transaction A then tries to access portion Y of the database while transaction B tries to access portion X, a deadlock occurs, and neither transaction can move forward. Transaction-processing systems are designed to detect these deadlocks when they occur. Typically both transactions will be cancelled and rolled back, and then they will be started again in a different order, automatically, so that the deadlock doesn't occur again. Or sometimes, just one of the deadlocked transactions will be cancelled, rolled back, and automatically restarted after a short delay.

منبع: http://en.wikipedia.org/wiki/Transaction...#Deadlocks

ولی شک دارم همین باشه.
بخصوص که در این مطلب نوشته (ظاهرا) که عملیات رفع بن بست و اجرای مجدد ترنزکشن ها رو دیتابیس خودش بصورت خودکار (ظاهرا پشت صحنه) انجام میده. اگر این استنباط درست باشه، این سوال مطرح میشه که پس در سطح برنامه نویس و منطقش چه مشکلی چطوری ممکنه پیش بیاد و بعدش برنامه نویس چطوری میتونه در اون ارتباط کاری کنه؟
  پاسخ
تشکر شده توسط : admin
#5
در مورد deadlock خود دیتابیس این رو مدیریت می کنه و نیازی نیست که برنامه نویسی کاری رو انجام بده. ولی در سطح برنامه نویسی باید تا جای ممکن جلوی deadlock رو گرفت.
  پاسخ
تشکر شده توسط :
#6
ولی بنظر نمیاد منظور از اون جملات این قضیه بوده باشه:

... automatic aborts from the server, which is a common problem with transactional database systems.

ترجمه: «... abort های خودکار از طرف سرور، که یک مسئلهء متداول با دیتابیس های ترنزکشنی است.»

... an automatic rollback (which can happen with transactional tables if you are not very careful)

ترجمه: «... یک rollback خودکار (که میتواند با جدول های ترنزکشنی اتفاق بیفتد اگر شما خیلی با دقت نباشید)»

این چیزی که این جملات میگه زیاد با اون قضیهء deadlock جور درنمیاد.
این جملات طوری صحبت کردن که اولا میگه یه مسئلهء متداول است، دوما طوری میگه که انگار برای برنامه نویس دردسرساز میشه، سوما میگه برنامه نویس باید خیلی با دقت باشه تا ازشون اجتناب کنه.
اما این قضیهء deadlock که الان من و شما روش بحث کردیم بنظرم نمیاد اینطورها باشه. اگر زیاد پیش نمیاد و/یا خود دیتابیس بطور خودکار مدیریت و حلش میکنه ، پس دیگه این جملات هشدار دهنده در رفرنس MySQL چه معنی ای دارن؟
بعدم این چیزها رو طوری گفته بعنوان یک مشکل و عیب ترنزکشن ها.
بالاخره باید برای برنامه/برنامه نویس یه مشکلی پیش بیاره که این حرفا رو بزنه یا نه؟ اگر یه چیزی پشت صحنه است گفتنش به این شکل و در اینجا فکر نمیکنم لزومی میداشت.

من آدم دقیقی هستم.
همین چندتا جمله توی یک صفحه، باید مو رو از ماست بکشم ببینم دقیقا منظورش چی بوده.
هر جمله ای، کوچکترین اشاره ای، یک جمله بندی خاص، کلمات خاص، کلمه ها و عبارت ها و اصطلاحات خاص، گاهی حتی چیزهای بظاهر بی معنی و تصادفی، میتونن مهم باشن و سرنخی که باید دنبال کرد.
البته متون فنی ای هم که تاحالا خوندم در اکثر موارد نویسنده هم درواقع منظور خاصی داشته و دقیقا نسبت به جمله بندی و چیزهایی که بیان میکرده آگاه بوده. دقیقا لحنی که داشته معنای خاصی داشته.
البته بعضی موارد بی نتیجه و کم ارزش هم بعضا بوده، ولی اکثریت موارد صحیح و مهم بوده.
اکثر چیزهایی مثل اینها رو که پیگیری کردم دیدم بله یک نکته و داستانی در پشتش نهفته است.
بخاطر همین خیلی چیزها رو متوجه شدم و میدونم و میتونم پیشبینی کنم، که خیلی افراد دیگر اینطور نیستن.
پس باید دید منظور چی بوده دقیقا چرا نویسنده این حرفها رو زده دقیقا به چه چیزی اشاره کرده!
در این رشته، البته نه فقط این رشته، بلکه هرچیز پیشرفته و پیچیده و ظریف دیگری، حتی الامکان نباید هیچ چیز نادانسته ای برای آدم باقی بمونه.
البته اگر علاقمند واقعی باشه و بخواد صاحبنظر و پخی بشه در اون زمینه.
  پاسخ
تشکر شده توسط :
#7
منم فکر نکنم منظورت deadlock باشه.
اینجور بود مستقیم می گفت deadlock
البته من به مشکلی با ترنزکشن ها برنخوردم
چرا توی فروم خود mysql می پرسی؟
  پاسخ
تشکر شده توسط :
#8
آره توی فکرش بودم.
ولی الان اینجا خواستم ثبت نام کنم: http://forums.mysql.com/index.php
ما رو تحریم کرده!
با فیلترشکن هم خوب کار نمیکنه.
ببین میتونی یه اکانت درست کنی بدی من؟
البته اگر زحمتی نیست Big Grin
  پاسخ
تشکر شده توسط :
#9
یوزر قبلی منم کار نمی کنه
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان