معماری اراکل
پایگاهداده اراکل متشکل از قسمتهای مختلفی میباشد. بعضی از آنها ساختارهای حافظه میباشندو بعضی دیگر پردازشهایی در پشت صحنه میباشند که دقیقا وظایف خاصی را انجام میدهندو منابع به کار گرفته شده توسط هارد دیسک برای ذخیره کردن داده های یک سازمان وهمچنین ابزارهایی طراحی شده برای بازیافت اطلاعات برای جلوگیری از بین رفتن آنها دراثر اشتباهات و خراب شدن دیسک میباشد. به مجموعه ساختار های حافظه و پردازشهایمربوط به انجام وظایف Oracle Instance میگویند. و به مجموعه این Instance و بقیهاجزاء Oracle Database میگویند.
Oracle Server ArchitectureMemory ArchitectureSGA : Oracle's Primary Memory Componentدراین بخش ابتدا به ساختارهای حافظه در یک Oracle Instance میپردازیم. به طور کلی دوساختار اصلی از حافظه در اراکل وجود دارد. اولین قسمت و مهمترین قسمت System Global Area یا SGA میباشد . بیشتر اوقات وقتی از حافظه صحبت میشود منظور همان SGA میباشد. خود SGA تشکیل شده از قسمتهای مختلفی از جمله Buffer Cache, Shared Pool, Redo Log Buffer میباشد. البته اجزای دیگری در این قسمت وجود دارد که در فرصت مناسب به شرحآنها خواهیم پرداخت.
Buffer Cacheاین ساختار حافظه تشکیل شده از بافرهایی به اندازه هاییکسان که به آن Database Block گفته میشود میباشد. که کار آن ذخیره داده هایی کهاست که توسط Sql به سمت کاربر بر میگردد. به طور کلی شما می تواننید Buffer Cache را را مجموعه ای از بافرها با سایزهای یکسان تصور کنید. به خاطر همین است که وقتیشما پارامترهای یک Database را تنظیم میکنید تعداد بافرها را مشخص میکنید نه سایزآن را به بایت. Datablock واحدی مجزا از حافظه در اراکل است که میتواند چندین سطراز یک Table را در خود جای دهد.
Buffer Cache دارای دو وظیفه اصلی میباشد. یکی برای افزایش کارایی اراکل برای جواب دادن به Select های تکراری از سمت کاربر ووظیفه دوم سرعت بخشیدن به تغییراتی است که کاربر در Database میدهد. این تغییراتابتدا در حافظه ثبت شده و بعدا بر روی دیسک ذخیره میشود.
Shared Poolاین ساختار تشکیلشده از سه قسمت میباشد که وجود دو قسمت آن لازم میباشد . قسمت اول Library Cache میباشد که محل نگهداری دستورهای تجزیه شده Sql و نگهداشتن آنها در حافظه برایاستفاده مجدد میباشد و قسمت دوم Dictionary Cache میباشد که گاهی به آن Row Cache نیز گفته میشود و وظیفه آن نگهداری اطلاعات اخیر خوانده شده از Data Dictionary میباشد که به عنوان مثال شامل Usernames, Password, Previlages میباشد.
Redo Log Bufferاین قسمت تغییرات ایجاد شده توسط DML و توسط کاربر ایجاد شده است را در خودنگهداری میکند. دستورهای DML شامل Update, Delete, Insert, Drop و... که توسطکاربر اجرا شده و باعث تغییرات در Database, Tables, Rows میشود. این تغییرات بهصورت Redo Entry در حافظه نگهداری و سپس بر روی دیسک ذخیره میشوند که توسط آنهامیتوان اشتباهاتی را که کاربران انجام میدهند و باعث از دست دادن اطلاعات میشودرا توسط این Redo Entry ها بازیافت نمود.
The PGA : The Oracle User's Memory Areaساختار دیگر حافظه در اراکل Program Global Area نام دارد. که کار آننگهداشتن مقادیر متغییرهای تعریف شده توسط کاربران میباشد. اطلاعات هر کاربرنمیتواند Share باشد و باید فضای مخصوص به خودش را داشته باشد چون مقادیر واقعیمتغییرهای درخواست شده توسط کاربر در این قسمت یافت میشود.
Reading Data From Diskپردازش سرورهمیشه در اراکلچندین پردازش بطور همزمان با یکدیگر در حال اجرا شدن میباشند که شامل Background, Server, And Network Process میباشند که مهمترین آنها از نظر تاثیر گذار بودن برکار کاربر server process میباشد که که اطلاعات در خواستی یک کاربر را از روی دیسکخوانده و آن را به Buffer Cache منتقل میکند. به طور کلی دو راه برای مدیران اراکلبرای پیاده سازی Server Process وجود دارد. Shared Server And Dedicated Server
Dedicated Serverدر این روش برای هر کاربری که به اراکل متصل میشود.یک اداره کننده Handler برای پردازشهای کاربر در نظر گرفته میشود که اصطلاحا به آن Genie Handler میگویندو به ازای هر کاربر که به اراکل متصل میشود یک Handler نیز ایجاد میشود کهمسئولیت خواندن دادههای درخواست شده از طرف کاربر و منتقل کردن آنها بر روی Buffer Cache را دارند و هر کاربر Handler مخصوص خودش را خواهد داشت. همچنین در این روشنیاز بیشتری به حافظه و استفاده از پردازشگر میباشد. اگر منابع سخت افزاری بهاندازه کافی موجود باشد این روش انتخاب بسیاری از مدیران شبکه میباشد.
Shared Serverدراین روش بر خلاف روش قبل تعداد کمی Server Process در اراکل در حا اجرا شدنمیباشند که به درخواستهای کاربران پاسخ میدهند. در این روش چندین کاربر با یک Server process اداره میشوند. و ارکل این عمل را با استفاده از یک Network Process به نام Dispatcher انجام میدهد. در خواست هر کاربر به یک Dispatcher اتصال مییابدو توسط آن به درخواستهای کاربران جواب داده میشود. Dispatcher تمام درخواستها رادر یک صف قرار داده و به آنها جواب میدهد. این مساله به معنی صرفا یک Dispatcher در کل اراکل نمیباشد. در این روش نیز شما قادر خواهید بود که Server Process And Dispatcher های متعددی را ایجاد نمایید. در این روش مصرف سخت افزاری کمتری نسبت بهروش قبل لازم میباشد. در Dedicated Server برای هر کاربر که به پایگاه متصلمیشود زمانی برای ایجاد یک Server Process لازم میباشد در حالی که در Shared Server، کاربران با استفاده از سرویس گرفتن از طریق یک Dispatcher موجود و یک Server Process در زمان صرفه جویی میکنند. به همین دلیل در پایگاههایی که تعدادمتعددی از کاربران به آن متصل میشوند استفاده از این روش بهتر میباشد.
User session Information
user session برای یک کاربر در اراکل در Shared pool ذخیره میشود اگر DBA اراکل را در حالت Shared Server تنظیم کرده باشد. در حالتی که اراکل در حالت Dedicated Server میباشد، User Session در PGA نگهداری میشود.
Structures That Connect Users to Oracle Serversاولین مرحله ای که درخواست کاربر به آن میرسد Oracle Listener میباشد که بر روی پورت خاصی به درخواستهای کاربران گوش میکند. وقتی که درخواست کاربر به اراکل Listener رسید، امکان انجام شدن دو عمل وجود دارد. اگر اراکل از Dedicated server استفاده میکند، Listener به اراکل دستور ایجاد یک Dedicated Server را میدهد و سپس درخواست کاربر را به آن واگذار میکند. اگر Multi Thread Server مورد استفاده اراکل باشد، Listener درخواست کاربر را به به یکپردازشگر که همان Dispatcher Process میباشد واگذار میکند. بعد از انجام هر کداماز اعمالی که ذکر کردم، Listener دیگر نقشی نخواهد داشت و آماده قبول کردن درخواستبعدی از کاربر میباشد.
وقتی که درخواست کاربر به اراکل میرسد اگر اراکل درحالت MTS باشد، وقتی که کاربر درخواستی را انجام میدهد، Dispatcher درخواست کاربررا در یک صف به نام Request Queue یا همان صف درخواست کاربران قرار میدهد. Request Queue در System Global Area قرار دارد که درخواستها را به ترتیب جواب میدهند وبرای اینکار از الگوریتم معروف First-In-First-Out استفاده میکند.
هر Dispatcher در SGA صف مربوط به خود رادارد و به درخواستهای صف مربوط به خودش پاسخمیگوید وجواب پاسخها نیز در بازگشت به کاربر مربوطه بر میگردد.
Stages in Processing Queries, Commits and Changesزمانی که شما درخواست یک سری دادههای مشخص از اراکلرا توسط یک Sql Select انجام میدهید، دستورات به گونهای است که شما درخواستاطلاعات دلخواه خود را صاذر میکنید. خروجی این دستورات باید یرای اراکل قابل فهمباشد. این کار توسط Relational Database Management System که همان RDBMS میباشدانجام میشود. RDBMS دستورات SQL شما را به گونهای برای اراکل که قابل فهم باشدترجمه میکند. مراحل پردازش به صورت زیر میباشد:
Search Shared Pool
RDBMS ابتدا سعی میکند کهیک کپی از SQL ترجمه شده را در Library Cache پیدا کند.
Validate Statement
RDBMS، درستی دستوراتSQL را که توسط کاربر اجرا شده است را چک میکند.
Validate Data Source
RDBMS مطمئن میشود کهتمام سطرها و ستونهای که کاربر دز دستورش به آنها اشاره کرده است وجود داشته باشد.
Acquire Locks
RDBMS در این مرحله object های استفاده شده توسط دستور کاربررا تا پایان اجرای آن قفل میکند.
Check Privileges
RDBMS مجوز کاربر را برای اجرای دستورات SQL راکنترل میکند.
Pars Statement
RDBMS با تشکیل یک Parse Tree برای دستور SQL آن را در Library Cache قرار میدهد که شرکت اراکل بر این عقیده است که این روش بهینه برایاجرای دستورات اراکل میباشد. اینها مراحلی هستند که RDBMS آنها را انجام میدهد تابه دادههای مورد نظر کار بر برسد. اگر دستورات در Library Cache وجود داشت اینمراحل قابل حذف میباشد.
Execute Statement
RDBMS تمام پردازشهای لازم را برای اجرای Select Statement را انجام میدهد، در این لحظه Server Process دادههای مورد نظر را ازروی دیسک به Buffer Cache منتقل میکند.
Fetch Values From Cursorزمانی که اجرای select statement پایان یافت دادهها در یک Cursor ذخیره شده و به Variable هایمورد نظر الصاق میشوند و به User Process باز میگردند.
Stages In Processing DML Statementیکی دیگراز پردازشهای اراکل Undo Segment میباشد که کار آن ذخیره کردن ورژنهای قدیمیدادههایی میباشد که توسط دستورات DML که توسط کاربر اجرا شده است را انجاممیدهد. این دستورات دستوراتی از قبیل Update, Insert، Delete میباشد.
پردازش دستورات DML به شرح زیر میباشد:
Parse Statements
RDBMS با تشکیل یک Parse Tree برای دستورات و قرار دادن آنها در Library Cache مراحل اجرای آنها را فراهممیکند. اگر Parse Tree در Library Cache وجود داشته باشد. این مرحله اجرا نمیشود.
Execute Statement
RDBMS تمام پردازشها را برای اجرای دستورات DML انجاممیدهد. برای آنجام Update و یا Delete پردازشگر سرور یا همان Server Process دادهها را از روی دیسک به Buffer Cache منتقل میکند و دادههای منتقل شده را تاپس از پایان تغییرات Lock میکند. که این عمل باعث میشود تا دیگر کاربران نتوانندروی این دادهها تغییرات ایجاد کنند. برای انجام Insert این بار Server Process یک Block خالی را از روی دیسک انتخاب کرده و اطلاعات جدید را بر روی آن قرار میدهد. در کنار انجام شدن این پردازش، پردازش Undo Segment نیز انجام میشود که اطلاعاتقدیمی و جدید را ذخیره میکند.
Generate Redo Information با توجه به مطالبی که قبلا با هم مرورکردیم، Redo Log Buffer تغییراتی را که روی دادهها انجام میشود را ذخیره میکند. بعد از انجام و تغییرات روی دادهها که توسط DML انجام گرفته است حالا نوبت User Process میباشد که یک Redo Entry را در داخل Redo Log Buffer بنویسد. بدین ترتیباراکل میتواند در مواقعی که دادهها از بین میروند و یا اینکه خراب میشوند، آنهارا بازیابی کند. این Redo Entry ها بعدا بر روی دیسک ذخیره میشوند.
Moving Data Changes From Memory To Diskبعد از تغییرات دادهها و پایان اجرای دستورات، دادههای تغییر داده شده در Buffer Cache باید به روی دیسک انتقال داده شوند. به بافرهای تغییر کرده درون بافراصطلاحا Dirty میگویند. همچنین اطلاعات در مورد تغییراتی که بر روی دادهها انجامشده است نیز در Redo Log Buffer وجود دارد. با ساختن تمام این تغییرات در حافظهاراکل قادر خواهد بود تا با سرعت بیشتری به DML Statement ها جواب دهد. به دلیلاینکه پیاده سازی و تغییرات بر روی حافظه سریع تر از ایجاد تغییرات بر روی دیسکمیباشد. و دلیل دیگر این است که کاربر دیگر نیازی ندارد تا منتظر انتقال دادههایذخیره شده بر روی دیسک باشد. اراکل با اجرای دو پردازش در پشت صحنه تمام وظائف بالارا انجام میدهد.این دو پردازش DBW0, LGWR نام دارند که کار انتقال دادهها از روی Buffer Cache و Redo Log Buffer را بر روی دیسک انجام میدهد. این پردازشها Asynchronous هستند بدین معنی که این پردازشها گاهی بعد از این که کاربران تغییراترا انجام میدهند بر روی دیسک نوشته میشود.
Role of DBW0
Data Base Writer Process نامیدهمیشود که وظیفه آن انتقال Dirty Data Block ها از روی بافر به روی دیسک میباشد. این پردازش در ورژنهای قبلی اراکل DBWR نامیده میشد که در ورژنهای جدید به علتوجود چندین Database Writer Process دیگر به کار برده نمیشود.
این پردازشبه یکی از دلائل زیر انجام میشود:
وقتی که Server Process به فضای بیشتریدر Buffer Cache برای خواندن اطلاعات بیشتری احتیاج دارد.
وقتی که LGWR به DBW0 دستور نوشتن بدهد.
هر سه ثانیه و زمانی که تعداد Dirty Buffer ها بهمقدار بحرانی برسد.
نکته: مسالهای که LGWR به DBW0 دستور نوشتن میدهد، Check Point میباشد. عدد صفر در DBW0 میتواند بین 0 تا 9تغییر کند. پس اراکل میتواند تا 10 پردازش از DBW0 را داشته باشد.
Role of LGWR
Log Writer Process نامیده میشود که Redo Entry ها را از Redo Log Buffer در حافظه بر روی دیسک منتقلکند.
این پردازش به یکی از دلائل زیر انجام میشود:
وقتی که یکتراکنش به طور کامل انجام شود.
وقتی که یک سوم از Redo Log Buffer پر شدهباشد.
قبل از اینک DBW0 دادهها را از روی حافظه بر روی دیسک بنویسد.
Stages In Commit Processبا استفاده از دستور Commit تمام تغییراتی که توسط کاربر بر روی دادهها درسطح User Process انجام شده است حالت پایدار پیدا میکنند. با استفاده از rollback تغییرات روی دادهها منسوخ میشوند وUndo Segment روشی است که اراکل با نگهداری یککپی از دادههای قدیمی و نگهداری آنها در Undo Segment، اراکل میتواند تغییرات رافسخ کند. این کار تا زمانی قابل انجام میباشد که Commit انجام نشده باشد.
نکته: استفاده از Commit دلالت بر نوشته شدنتغییرات ایجاد شده توسط کاربر بر روی دیسک ندارد. فقط در زمانهایی که در بالا گفتهشد DBW0 دادهها را بر روی دیسک مینویسد.در زمان Commit کارهای زیر انجاممیپذیرد:
آزاد کردن تمام سطرهایی که قفل شدهاند. بعد از آزاد شدن آنهاکاربران دیگر میتوانند در آن تغییرات ایجاد کنند.
آزاد کردن Undo Segment که توسط User Transaction قفل شده است.
ایجاد یک Redo Entry توسط User Process در زمانی که Commit انجام میشود.
Sys,System And Data Dictionary
sys, system دو کاربری هستند که اراکل در زمان ایجاد پایگاه داده آنها را ایجاد میکند. این دوکاربر قابلیت مدیریت پایگاه داده اراکل را دارند. کاربر SYS مهمتر میباشد زیرامالکیت system table های اراکل را که دیکشنری دادهها نیز از آنجا مشتق میشود رانیز داراست. Oracle Data Dictionary نیز یکی از منابع سیستم میباشد که به منظور کسباطلاع از هر چیزی در پایگاه شما به کار میرود. در بحث View از اراکل دو عنوانپایهای وجود دارد.یک دسته انهایی هستند که اطلاعاتی راجع به Object های پایگاهداده به شما میدهند که به آنها Data Dictionary Views گفته میشود و یک سری از آنهااطلاعاتی را راجع به کارایی کل سیستم به شما بر مگردانند که به آنها Dynamic Performance Views گفته میشود .