خواندن داده ها در پايگاه داده به صورت سازگار و با قفل گذاري

خواندن سازگار بدون قفل گذاري يك خواندن سازگار بدين معني است كه اینودی‌بي از چند نسخه اي براي تهيه يك تصوير از پايگاه داده موقع اجراي پرس و جو استفاده مي كند و آن پرس و جو فقط تغييرات اعمال شده توسط تراكنش هاي اجرا شده قبل از آن نقطه از زمان را مي بيند و تغييرات اعمال شده توسط تراكنش هاي بعدي و يا آنهايي كه اعمال نشده اند را نمي تواند مشاهده كند. اما استثناي اين قانون اين است كه پرسجو تغييرات قبلي اعمال شده در همان تراكنش را مشاهده مي كند. اين استثنا باعث بوجود آمدن اين اختلاف مي شود كه ممكن است هنگامي كه يك تراكنش تعدادي از سطر ها را بروز رساني ميكند دستور Select علاوه بر تغييرات جديد اعمال شده نسخه هاي قديمي سطر ها را نيز ببيند و اگر نشست هاي ديگر نيز به طور پيوسته جدول را بروز رساني كنند ممكن است تراكنش نسخه اي از جدول را كه اكنون در پايگاه داده وجود ندارد را مشاهده كند. اگر سطح ايزوله سازي برابر با مقدار پيشفرض REPEATEABLE_READ باشد تمام خواندن هاي سازگار در يك تراكنش از يك تصوير ايجاد شده در اولين خواندن استفاده مي كنند و مي توانيد با اعمال تراكنش جاري و ايجاد يك پرس و جوي جديد تصاوير جديدتري ايجاد نماييد. با استفاده از سطح READ_COMMITED هر يك از خواندن هاي سازگار از تصوير جديد ايجاد شده براي خود استفاده مي كنند. خواندن سازگار بطور پيشفرض در اینودی‌بي براي پردازش SELECT در سطوح READ_COMMITED و REPEATED_READ استفاده مي شود. يك خواندن سازگار هيچ قفلي را روي جدول هاي مورد دسترسي خود ايجاد نمي كند و به همين دليل ساير نشست ها مجاز به تغيير آن جدول در هنگامي كه خواندن انجام مي شود هستند. فرض كنيد شما از حالت پيشفرض استفاده مي كنيد. در اين صورت با اجراي يك خواندن سازگار كه همان دستور SELECT معمولي هست يك نقطه زماني به تراكنش شما اعطا مي شود كه در آن نقطه پرس و جو پايگاه داده را مشاهده ميكند. اگر يك تراكنش ديگر بعد از آن نقطه زماني يك سطر جدول را حذف كند و تغييرات را اعمال كند شما آن سطر را نخواهيد ديد به همين طريق با دستور هاي بروزرساني و درج برخورد مي شود. تصوير وضعيت پايگاه داده براي دستور SELECT در تراكنش اعمال مي شود و نه الزاما براي دستور هاي DML. اگر شما سطر هايي را تغيير دهيد يا درج نماييد و آن تراكنش را اعمال كنيد يك دستور خواندن يا بروزرساني كه توسط يك تراكنش همزمان از نوع REPEATEABLE_READ صادر شده باشد سطر هاي جديد اعمال شده را تحت تاثير قرار مي دهد حتي اگر پرس و جو نتواند آنها را ببيند. اگر يك تراكنش سطر هاي اعمال شده توسط يك تراكنش ديگر را بروزرساني يا حذف كند آن تغييرات براي تراكنش جاري مشاهده پذير خواهند بود. به عنوان مثال ممكن است با يك موقعيت مانند آنچه در پايين اشاره شده مواجه شويد: SELECT COUNT(c1) FROM t1 WHERE c1 = ‘xyz’; — Returns 0: no rows match. DELETE FROM t1 WHERE c1 = ‘xyz’; — Deletes several rows recently committed by other transaction. SELECT COUNT(c2) FROM t1 WHERE c2 = ‘abc’; — Returns 0: no rows match. UPDATE t1 SET c2 = ‘cba’ WHERE c2 = ‘abc’; — Affects 10 rows: another txn just committed 10 rows with ‘abc’ values. SELECT COUNT(c2) FROM t1 WHERE c2 = ‘cba’; — Returns 10: this txn can now see the rows it just updated. شما مي توانيد نقطه زماني را با اعمال كردن تراكنش جاري و اجراي يك دستور مجدد مانند SELECT يا START_TRANSACTION_WITH_CONSISTENT_SNAPSHOT جلو ببريد. به اين عمل كنترل سازگاري چند نسخه اي مي گويند. در مثال زير نشست A سطر هاي درج شده توسط B را فقط در صورتي كه B آنها را اعمال كند و A نيز به همين صورت اعمال شود تا نقطه زماني آن جلو تر از زمان اعمالB برود ، مشاهده خواهد كرد. Session A Session B SET autocommit=0; SET autocommit=0; time | SELECT * FROM t; | empty set | INSERT INTO t VALUES (1, 2); | v SELECT * FROM t; empty set COMMIT; SELECT * FROM t; empty set COMMIT; SELECT * FROM t; ——————— | ۱ | ۲ | ——————— ۱ row in set اگر مي خواهيد جديد ترين تصوير پايگاه داده را ببينيد بايد يا از سطح READ_COMMITED و يا خواندن هاي با قفل گذاري استفاده كنيد. SELECT * FROM t LOCK IN SHARE MODE; با استفاده از سطح READ_COMMITED هر تراكنش با ايجاد يك تصوير جديد از پايگاه داده براي خود از آن براي خواندن استفاده مي كند. اما با ساتفاده از LOCK IN SHARE MODE يك قفل گذاري اتفاق مي افتد و دستور SELECT تا زماني كه تراكنش داراي جديد ترين تصوير به اتمام برسد مسدود مي شود. خواندن هاي سازگار روي برخي از دستورات DDL كار نمي كنند: • خواندن هاي سازگار روي DROP TABLE كار نميكنند چون كه ماي اسكيوال نمي تواند با جدول هاي Drop شده كار كند و اینودی‌بي آن جدول ها را پاك مي كند. • خواندن هاي سازگار روي ALTER TABLE كار نمي كند به اين دليل كه اين دستور يك كپي موقت از جدول تهيه مي كند و بعد از آن جدول اصلي را حذف ميكند. هنگامي كه يك دستور خواندن سازگار در يك تراكنش صادر شود سطر ها و جدول ها قابل مشاهده نيستند زيرا هنگامي كه تصوير تراكنش گرفته شده است وجود نداشته اند. در اين مورد يك خطا به صورت ER_TABLE_DEF_CHANGED برميگرداند. انواع خواندن براي دستور هاي SELECT متفاوت هست مانند INSERT INTO … SELECT ، UPDATE … SELECT ، و CREATE TABLE … SELECT كه در آنها FOR UPDATE يا LOCK IN SHARE MODE مشخص نشده است: • به صورت پيشفرض اینودی‌بي از قفل هاي قوي تر استفاده ميكند و SELECT نيز به صورت READ COMMITED استفاده مي شود. • براي استفاده از يك خواندن سازگار در اين شرايط بايد گزينه ي INNODB_LOCKS_UNSAFE_FOR_BINLOC را فعال نماييد و سطح ايزوله سازي را به يكي از حالت هاي READ UNCOMMITED ، READ COMMITED يا REPEATED READ تغيير دهيد و در اين صورت هيچ قفلي روي سطر هاي درحال خوانده شدن قرار نمي گيريد. خواندن با قفل گذاري اگر شما در يك ترامنش علاوه بر پرس و جوي داده ها اقدام به درج يا بروزرساني داده ها نماييد استفاده از دستور معمولي SELECT حفاظت كافي را ايجاد نمي كند و ساير تراكنش ها مي توانند سطر هايي را كه جستجو كرده ايد را بروزرساني يا حذف كنند . اینودی‌بي از دو نوع خواندن با قفل گذاري پشتيباني ميكند كه محافظت بيشتري را ارائه ميكنند: • دستور SELECT …. LOCK IN SHARE MODE يك قفل از نوع اشتراكي روي سطر ها هنگام خواندن ايجاد مي كند در اين صورت ساير تراكنش ها مي توانند آن سطر ها را بخوانند ولي نمي توانند تغييراتي را روي آن اعمال كنند تا زماني كه تراكنش شما به پايان برسد. همچنين در اين حالت اگر سطر هايي كه مي خواهيد بخوانيد توسط تراكنش ديگري تغيير كرده باشند تراكنش شما منتظر مي ماند تا آن تغييرات اعمال شوند و سپس از آخرين مقادير براي خواندن استفاده خواهد كرد. • براي ركورد هاي شاخص ،دستور SELECT …. FOR UPDATE سطر ها و تمامي شاخص هاي وابسطه را مانند هنگام بروزرساني قفل گذاري ميكند در اين صورت ساير تراكنش ها نمي توانند آن سطر ها را بروزرساني نموده يا دستور SELECT .. LOCK IN SHARE MODE را روي آن اجرا كنند. خواندن هاي سازگار تمامي قفل هاي موجود روي سطر ها را ناديده ميگيرند. اين نوع دستورات هنگام برخورد با داده هاي دختي يا گرافي در يك جدول يا به صورت جدا در چندين جدول مفيد خواهند بود. در اين صورت شما رائس هاي گراف يا برگ هاي درخت را پيمايش نموده و حق داريد به عقب برگشته و هر يك از اين اشاره گرها را تغيير دهيد. تمام قفل هاي تنظيم شده توسط LOCK IN SHARE MODE و FOR UPDATE زماني كه تراكنش ها اعمال شوند يا به عقب بازگردند آزاد خواهند شد. نكته : قفل كردن سطر ها براي بروزرساني با استفاده از SELECT FOR UPDATE زماني كه AUTOCOMMIT غير فعال باشد كار ميكنند و در صورتي كه AUTOCOMMIT فعال باشد سطر هاي مشخص شده قفل نخواهند شد.

مدل تراكنش ها و قفل گذاري در اینودی‌بي

مدل تراكنش ها و قفل گذاري

به جهت پياده سازي يك برنامه پايگاه داده اي در سطح بزرگ و با ترافيك بالا و قابليت اطمينان زياد و براي ورود يك كد جايگزين از يك سيستم پايگاه داده اي ديگر و همچنين براي افزايش كارايي ماي اسكيوال بايد با جزئيات تراكنش ها و قفل گذاري كه مربوط به اینودی‌بی مي شوند آشنا شويد.

هدف مدل تراكنش اینودی‌بی اين است تا ويژگي جديد چند نسخه اي را با ويژگي سنتي قفلگذاري دو مرحله اي تركيب كند. اینودی‌بي سطر ها را قفل گذاري ميكند و سپس پرس و جو ها را به صورت عمليات خواندن سازگار به شيوه اوراكل و به طور پيشفرض انجام ميدهد. اطلاعات مربوط به قفل ها به صورت بهينه ذخيره شده اند و نياز به اينكپسوله كردن آنها نمي باشد. معمولا چند كاربر به طور همزمان مي توانند يك سطر يا مجموعه اي از سطر ها را در اینودی‌بی قفلگذاري كنند بدون اينكه دچار مشكل حافظه شود.

در اینودی‌بي تمام فعاليت هاي يك كاربر در قالب يك تراكنش انجام مي شود و در صورتي كه گزينه ي autocommit فعال باشد هر دستور در قالب يك تراكنش جداگانه انجام مي شود. به طور پيشفرض ماي اسكيوال هر نشست را با گزينه autocommit فعال ايجاد ميكند و بدين ترتيب بعد از اجراي هر دستور اگر با خطا مواجه نشود تغييرات اعمال مي شوند و در صورتي كه با خطا مواجه شود نحوه اعمال و يا بازگشت به عقب به نوع خطا بستگي داد. يك نشست كه autocommit براي آن فعال باشد مي تواند يك تراكنش چند دستوري را به وسيله شروع كردن آن با start_transaction يا begin و خاتمه ي آن با commit يا rollback انجام دهد.

در صورتي كه براي يك نشست autocommit فعال نباشد آن نشست هميشه داراي يك تراكنش باز بوده و با اجراي دستور commit يا rollback آن تراكنش بسته شده و يك تراكنش جديد ايجاد مي شود.

دستور commitبه اين معني است كه تغييرات اعمال شده توسط يك تراكنش به صورت دائمي اعمال مي شوند و براي ساير نشست ها قابل مشاهده خواهند بود.

از جهت ديگر دستور rollback بدين معني است كه تغييرات اعمال نخواهند شد و همه تغييرات تراكنش جاري لغو مي شوند.

با اجراي هريك از دستوراتcommit و rollback تمام قفل هاي اعمال شده توسط تراكنش آزاد مي شوند.

 

بنا به تعريف سطوح ايزوله سازي در ماياسكيوال ۱۹۹۲ سطح پيشفرض در اینودی‌بي برابر REPEATEABLE_READميباشد. همچنين اینودی‌بي تمام چهار سطح پيشنهاد شده( READ_UNCOMMITED ، READCOMMITED ،‌ REPEATEABLE_READ و SERIALIZABLE. ) توسط استاندارد ماي اسكيوال را ارائه مي دهد.

كاربر مي تواند سطح ايزوله سازي يك تراكنش يا تراكنش هاي آتي را با استفاده از دستور SETTRANSACTION تعيين نمايد. براي تغيير دادن سطح ايزوله سازي سرور بايد از دستور –transaction-isolation در خط فرمان يا فايل پيكربندي استفاده نمود.

در سطح قفلگذاري سطر ها اینودی‌بي معمولا از روش قفل گذاري next-key استفاده مي كند. اين بدين معني است كه اینودی‌بي علاوه بر ركورد هاي شاخص مي تواند فضاي خالي قبل از آنها را نيز قفل گذاري نمايد تا از عمليات درج كه ممكن است توسط نشست هاي ديگر درآن فضا انجام شود جلوگيري نمايد.

يك قفل next-key بدين معني است كه يك ركورد شاخص و فضاي خالي قبل از آن قفل گذاري مي شود.

يك قفل gap به قفلي گفته مي شود كه فقط فضاي خالي بين ركورد ها را قفلگذاري ميكند.

ماي اسكيوال و مدل ACID

ماي اسكيوال و مدل ACID

مدل ACID مجموعه اي از مفاهيم و قواعد طراحي است كه بر قابليت اطمينان در ذخيره داده هاي تجاري و برنامه هاي با كاربرد حياتي تاكيد دارد.

ماي اسكيوال شامل قطعات مختلفي مانند موتور ذخيره سازي اینودی‌بی است كه كه بسيار به مدل ACID سازگار هستند كه موجب مي شود تا داده ها در مواردي مانند استثنائي مانند خطاي نرم افزاري و مشكلات سخت افزاري ازبين نروند. زماني كه از ويژگي هاي مدل ACID استفاده مي شود ديگر نياز به طراحي مجدد چرخه ي بررسي سازگاري داده ها و مكانيزم هاي بازيابي خطا وجود ندارد. همچنين در مواردي كه سازگاري داده ها يا ازبين رفتن بخش اندكي از داده ها براي سيستم اهميت زيادي نداشته باشد مي توان از برخي از ويژگي هاي ACID جهت كارايي بيشتر چشم پوشي نمود.

بخش هاي زير به نحوه برخورد ويژگي هاي ماي اسكيوال و به طور خاص موتور ذخيره سازي اینودی‌بی با دسته بندي هاي مدل ACID مي پردازد.

اتمي بودن

جنبه اتمي بودن مدل ACID بيشتر به تراكنش هاي اینودی‌بی مرتبط است. ويژگي هاي مرتبط ماي اسكيوال عبارتند از :

  • تنظيمات اعمال خودكار (autocommit)
  • دستور اعمال (commit)
  • دستور بازگشت به عقب (rollback)

سازگاري

اين جنبه بيشتر به فرآيند هاي داخلي اینودی‌بی بستگي دارد تا از تداخل داده ها جلوگيري كند . ويژگي هاي مرتبط ماي اسكيوال عبارتند از :

  • بافر doublewrite در اینودی‌بی
  • بازيابي خطا در اینودی‌بی

 

ايزوله سازي

اين جنبه به طور اصلي به تراكنش هاي اینودی‌بی مربوط مي شود كه به صورت خاص بيانگر سطح ايزوله سازي در تراكنش ها مي باشد. ويژگي هاي مرتبط ماي اسكيوال عبارتند از :

  • تنظيمات اعمال خودكار (autocommit)
  • دستور SET ISOLATION LEVEL
  • جزئيات سطح پايين قفل گذاري در اینودی‌بی ،‌اين تنظيمات در جدول Information_schemaمشاهده مي شوند.

با دوامي

جنبه دوام در مدل ACID شامل تنظيمات ويژگي هاي نرم افزاري ماي اسكيوال مي شود كه به طور خاص با سخت افزار شما در تعامل هستند. به دليل تفاوت هاي زياد در پردازنده ها ،‌ ابزار شبكه و رسانه ذخيره سازي اين قسمت براي ارائه راهنمايي و اطلاعات دقيق دشوار است. ويژگي هاي مرتبط ماي اسكيوال عبارتند از :

  • وضعيت بافر doublewrite در اینودی‌بی كه توسط گزينه innodb_doublewriteتنظيم مي شود.
  • گزينه پيكربندي innodb_flush_log_at_trx_commit
  • گزينه پيكربندي sync_binlog
  • گزينه پيكربندي innodb_file_per_table
  • نوشتن بافر در يك رسانه ذخيره سازي مانند دسيك ،‌SSD يا RAID.
  • كش با پشتيباني باتري در دستگاه ذخيره سازي
  • پشتيباني از فراخوان سيستمي fsync()
  • منبع تغزيه بدون وقفه UPS بايد از تمام سيستم هاي سرور و دستگاه هاي ذخيره سازي داده ها پشتيباني كند.
  • استراتژي تهيه نسخه پشتيبان مانند تعداد و دفعات تكرار تهيه نسخه پشتيبان

آموزش ساخت ایمیل در سی پنل

با سلام در این قسمت می خواهیم نحوه ایجاد ایمیل اکانت را در سی پنل دنبال نماییم ،

برای این کار ابتدا به کنترل پنل لاگین نموده و سپس Mail ، گزینه ی Email Accounts را انتخاب می نماییم.

در صفحه نمایش داده شده در فیلد Email ، یک نام کاربری مجاز برای ایمیل انتخاب می نماییم (با حروف انگلیسی و اعداد)

در فیلدهای بعدی رمز ورود و تکرار آن را وارد می نماییم و میزان استحکام پسورد را در قسمت Strength مشاهده می نماییم برای اینکه یک پسورد قوی انتخاب نمایید بهتر است طول آن بیش از ۸ کارکتر و از ترکیب حروف کوچک و بزرگ انگلیسی و اعداد به همراه کارکتر های خاص مانند ! @ و … استفاده شود.

همچنین می توان با استفاده از گزینه Password Generator یک پسورد قوی را به صورت تصادفی ایجاد نمود و پس از یادداشت آن و تیک زدن گزینه از آن استفاده نمود.

در قسمت Mail Quota ، مشخص می شود که این کاربر چه مقدار از فضای هاست را می تواند برای ایمیل خود استفاده نماید (به مگابایت) در صورتی که می خواهید هیچ محدودیتی اعمال نشود باید گزینه Unlimited را انتخاب نمایید.

با کلیک بر روی دکمه Create ایمیل جدید ایجاد می شود و در پایین صفحه  لیستی از ایمیل های ساخته شده نشان داده شده است.

در قسمت Email Search می توانید یک ایمیل خاص را که قبلا ایجاد شده است جستجو نمایید و تنظیمات آن را تغییر دهید همچنین از این قسمت می توانید پسورد ایمیل را مجددا تنظیم نمایید.

معرفي موتور ذخيره سازي اینودی‌بی

معرفي موتور ذخيره سازي اینودی‌بی

اینودی‌بی یک موتورذخیره ‌سازی برای مای اس‌کیوال است که درنسخه ۵٫۵ به بالای آن بصورت پیشفرض مورد استفاده قرارگرفته است. این موتور ویژگی‌های استانداردACIDرا به همراه پشتیبانی ازکلید خارجی (Foreign Key) ارائه می‌کند. این موتور به صورت استاندارد در تمام توزیع‌های باینری ارائه شده توسط مای‌اس‌کیوال ای‌بی (MySQL AB) به جز در برخی از نسخه‌هایOEMوجود دارد.

 

پس ازخریداری InnobaseOyتوسط شرکت اوراکل در سال ۲۰۰۵،اینودیبی به عنوان یک محصول شرکت اوراکل شناخته مي شد. این برنامه دارای دو مجوز می‌باشد. این برنامه تحت پروانه عمومی همگانی گنو توزیع شده است همچنین برای افرا ی که قصددارند از آن در برنامه‌های مالکیتی استفاده کنند مجوزصادرمی‌شود.

ويژگي هاي اصلي اینودی‌بی

  • عمليات هاي تغيير داده DML در اینودی‌بی بر اساس مدل ACID كار ميكند و تراكنش هاي آن از عمل هاي commit (اعمال تغييرات) ،‌rollback (بازگشت به عقب) و crash-recovery (بازيابي خطا) پشتيباني مي كنند.
  • قفل گذاري سطر ها و شيوه خواندن سازگار به سبك اوراكل باعث افزايش سازگاري و عملكرد در حالت چند كاربري شده است.
  • اینودی‌بی جدول ها را به گونه اي در ديسك ذخيره مي كند تا جستجو بر اساس كليد اصلي به صورت بهينه انجام شود.
  • براي حفظ جامعيت داده ها ،‌ اینودی‌بی از محدوديت هاي كليد خارجي پشتيباني ميكند و تمام اعمال بروزرساني ،‌درج و يا حذف قبل از اعمال شدن بررسي مي شوند تا موجب بروز ناسازگاري در جدول هاي مختلف نشوند.
  • مي توان جدول هاي اینودی‌بی را با جدول هاي ساير موتور هاي ذخيره سازي حتي در يك دستور تركيب نمود.
  • اینودی‌بی براي استفاده بهينه از پردازنده هنگام پردازش داده هاي بزرگ طراحي شده است.

خواب

بدان که خواب بر دماغ مسلط میشود و بدن را نیرو و استقامت می بخشد.

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

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

 

منبع : رساله الذهبیه ، طب و بهداشت از امام علی ابن موسی الرضا (علیه السلام) ترجمه نصیرالدین امیر صادقی