پایگاه داده اراکل متشکل از قسمتهای مختلفی میباشد. بعضی از آنها ساختارهای حافظه میباشند و بعضی دیگر پردازشهایی در پشت صحنه میباشند که دقیقا وظایف خاصی را انجام میدهند و منابع به کار گرفته شده توسط هارد دیسک برای ذخیره کردن داده های یک سازمان و همچنین ابزارهایی طراحی شده برای بازیافت اطلاعات برای جلوگیری از بین رفتن آنها در اثر اشتباهات و خراب شدن دیسک میباشد. به مجموعه ساختار های حافظه و پردازشهای مربوط به انجام وظایف Oracle Instance میگویند. و به مجموعه این Instance و بقیه اجزاء Oracle Database میگویند.
Oracle Server Architecture
Memory Architecture
SGA : 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 گفته میشود .