Sadad Flashcards
Table Space
یک فضای فیزیکی است که جدول و سایر اشیای پایگاه داده در آن ذخیره می شوند. به
table space
باید مسیر بدهیم که در کجا این
object
ها را ذخیره کند که به آن فضایی که مسیر می دهیم،
container
می گویند.
page size
اندازه صفحاتی را که برای
table space یا BufferPool
استفاده می شود، مشخص می کند. انتخاب مناسب
page size
برای اندازه صفحه میتواند کارایی سیستم را بهینه کند و باعث پردازش سریعتر دادهها شود.
هر رکورد باید در یک
page
ساخته شود.
این اندازه می تواند :
4K, 8k, 16k, 32k باشد.
BufferPool
فضایی از
RAM
است که ارجاع به دیسک را کم می کند و داده ها را در آن
Cache می کند.
یعنی بعد از خواندن دیتا از دیسک، داده در
bufferpool
کش می شود تا برای
read
بعدی از
bufferpool خوانده شود.
نکته:
بافرپول، دیتایی را که مستقیم از دیسک میخواند،
sync read
می کند و دیتایی را که مربوط به همان دیتا است را هم می خواند
، Async read می کند.
BufferPool
Clean Pages
صفحاتی که در دیسک نوشته شده اند.
BufferPool
Dirty Pages
صفحاتی که دیتای آن تغییر کرده است ولی هنوز در دیسک نوشته نشده اند.
syntax
Create BufferPool
CREATE BUFFERPOOL BP4kFNDCRD SIZE 5000 PAGESIZE 4096;
PAGESIZE:
اندازه صفحه را مشخص می کند.
SIZE:
تعداد صفحات را مشخص می کند.
انواع Table Space
1- Catalog Table Space:
به صورت خودکار بعد از ایجاد دیتابیس ایجاد می شود. جداولی که شامل اطلاعاتی درباره
object
های دیتابیس است مثل
table, view, index , …
را ذخیره می کند.
همان Meta Data
2- Temporary table Space:
شامل
temporary tables
1/ User temporary table space:
این فضا داده هایی را که از طریق دستورات
DECLARE GLOBAL, CREATE GLOBAL
ایجاد می شوند، را نگه داری می کنند.
2/System temporary table space:
این فضا داده های موقتی را برای عملیاتی مثل
join یا sort
نگهداری می کند.
B-Tree:(Balanced Tree)
این الگوریتم برای پیاده سازی ایندکس ها استفاده می شود.
Components of B-Tree:
1- Root Node:
گره ی ریشه که نقطه ی شروع درخت و شروع جستجو است.
2- Intermediate Node
شامل کلیدهایی که محدوده مقادیر فرزندانشان را مشخص می کنند.
3-Leaf node:
برگ های درخت که شامل داده های وقعی است و این نودها به همدیگر متصل هستند.
نکته: چون هر برگ به به برگ بعدی و قبلی خود اشاره می کند، پس ارتباط آن ها
linked list
دو طرفه است.
نکته: چون همه ی این
leaf node
ها به هم متصل هستند بنابراین جستجوی بازه ای در این ساختار ممکن و راحت است.
نکته: در هر گره برگ، یک
rid
به هر داده نگاشته شده است. و از این
rid
میتوانیم داده مورد نظرمان را پیدا کنیم.
در واقع
rid
آدرس هر رکورد در دیسک است. و داده را که پیدا کردیم، با این
rid
به رکورد مورد نظرمان می رسیم.
ارتباط
leaf nodes
با یکدیگر چگونه است؟
ارتباط
گره های برگ یا
leaf nodes
با یکدیگر به صورت
linked list
دو طرفه است.
یعنی هر گره ی برگه به گره ی برگ قبلی و بعدی خودش اشاره می کند
Inverse Scan
in
btree
اگر کوئری نیاز به جهت مخالف ذخیره سازی ایندکس داشته باشد، در
btree index
inverse scan
می کند.
چون ارتباط بین برگ های درخت
linked list
دو طرفه است
btree index
Page overflow
وقتی دیتایی را می خواهیم بین رکوردهای مرتب شده در یک جدول اینزرت کنیم، اگر فضایی برای اینزرت این دیتای جدید وجود نداشته باشد،
page over flow
رخ می دهد. یعنی دیتابیس یک
over flow page
ایجاد می کند و رکورد جدید را در این صفحه اینزرت می کند.
یک
pointer
که به
over flow page
اشاره می کند هم به
parent node
اضافه می کند که اگر در صفحه ی اصلی دیتا را پیدا نکرد، در
over flow page
دنبال آن بگردد.
چالش ها:
1-بار روی دیسک را افزایش می دهد چون ابتدا در صفحه ی اصلی جستجو می کند و اگر داده را پیدا نکرد باید در
over flow page
داده را جستجو کند.
2- کاهش سرعت جستجو
btree index
page split
اگر برای اینزرت دیتای جدید فضایی در صفحه وجود نداشت،
page split
رخ می دهد.
دیتابیس یک صفحه ی جدید ایجاد می کند و نصف داده های صفحه ی اصلی را به صفحه ی جدید منتقل می کند.
یک
pointer
به
parent node
اضافه می شود تا به صفحه ی جدید اشاره کند.
page over flow & page split
مهم ترین چالش برای این دو موضوع چیست؟
صفحه ی جدیدی که ایجاد می شود، ممکن است در کنار صفحه ی اصلی نباشد و اینطوری پرش بین صفحات غیر مجاور رخ دهد و پراکندگی دیتا افزایش می یابد.
index
Composite Index
وقتی روی چندین ستون ایندکس گذاری کنیم.
create index index_name on table_name(A, B)
ابتدا داده ها را بر اساس ستون
A
مرتب می کند و اگر مقادیر در ستون
A
یکسان بود، بر اساس ستون
B
مرتب می کند.
نکته:
بدترین حالت و کارایی این نوع ایندکس زمانی است که فقط روی ستون
B
شرط بگذاریم. چون باید ایتدا تمام مقادیر
A
را جستجو کند تا سپس به مقادیر
B
برسد.
index
PCTFREE
ایندکس درصدی از فضای
page
را برای
insert data, update data
رزرو می کند.
create index index_name
on table_name(column)
PCTFREE 10
10
درصد از
page
را رزرو می کند.
index
table space
for
index
به صورت دیفالت اگر
table space
را برای ایندکس مشخص نکنیم، در همان
table space
جدول ساخته می شود.
چه زمانی از
table space
دیگری برای ایندکس استفاده می کنیم؟
زمانی که جدول بزرگ و لش باشد و زیاد رشد کند
زمانی که فضای
table space
جدول پر شده باشد
logging
هر دیتابیس لاگ فایل های مربوط به خودش را دارد.
تغییرات دیتابیس در این لاگ فایل ها ذخیره می شود.
دیتابیس از
logging
برای
recovery
استفاده می کند
logging types
1-Circular Logging:
به صورت دیفالت وقتی دیتابیس ایجاد می شود، این نوع لاگ برایش فعال می شود
اگر لاگ فایل ها پر شوند، دیتابیس در لاگ فایل
overwrite
انجام می دهد.
یعنی دوباره روی لاگ های قدیمی، لاگ های جدید را می نویسد و به صورت حلقه ای این نوشتن لاگ ها را تکرار می کند
در این نوع لاگ فقط می توان
full backup و
offline backup
گرفت
2- Archive Logging:
لاگ فایل ها که پر شدند و تمام
transaction ها
commit
شدند، لاگ فایل ها را
archive
می کند.
Active log:
Archive Log:
Active log:
لاگ های فعال و تغییرات جدید دیتابیس هستند.
Archive Log:
لاگ های آرشیو شده ی دیتابیس هستند.
Connections
max_connection
این پارامتر حداکثر تعداد
هایconnection
متصل به یک
instance
را مشخص می کند.
Connections
max_appls
این پارامتر حدکثر تعداد
connectionهای
متصل به یک دیتابیس را مشخص می کند.
connection
connection concentrator
به ازای هر
connection
که یک ریکوئست یا کوئری فعال داشته باشد، یک
Agent
به آن
connection
تعلق می گیرد.
connection
چه زمانی می فهمیم از
connection concentrator
استفاده کردیم؟
وقتی نسبت
max_coordagent
کمتر از
max_connection
باشد، یعنی داریم از
connection concentrator
استفاده می کردیم.
Isolaltion level
1- Repeatable Read (RR):
وقتی یک دیتایی را می خوانیم، دیتا را قفل می کند و اگر دوباره هم همان دیتا را بخوانیم، همان داده را به ما بر می گرداند.
2- Read Stability (RS):
وقتی یک دیتایی را می خوانیم، اگر آن دیتا تغییر کند و تغییرات کامیت شود، در خواندن دوباره، تغییرات کامیت شده را می بینیم.
3- Cursor Stability (CS):
دیتا را بازه ای می خواند و قفل می کند.
4- Uncommited Read (UR):
تغییرات کامیت نشده ی تراکنش های دیگر هم می توانیم بخوانیم.
HADR
High Availability Disaster Recovery
وقتی دیتابیس
primary
به هر دلیلی در دسترس نبود و
failed شد
دیتابیس
standby
جایگزین آن می شود
HADR
Failover
in
HADR
اگر سیستم به صورت خودکار خرابی دیتابیس
primary را
تشخیص داد و به صورت خودکار دیتابیس
Standby
،را جایگزین کرد
failover
اتفاق می افتد.
HADR
Takeover
in
HADR
اگر به صورت دستی دیتابیس
standby
را جایگزین دیتابیس
primary
بکنیم،
takeover
اتفاق می افتد
HADR
قبل از جایگزینی
standby
با
primary
باید سینک دیتابیس
standby
با
primary
انجام شود، این سینک شدن در چند
mode
انجام می گیرد؟
IN 4 MODE:
1- Sync:
وقتی یک تراکنش در
primary
انجام شد، ابتدا تغییرات به
standby
ارسال می شود و اگر
primary
از standby
تاییدیه دریافت کرد که تغییرات را در خودش اعمال کرده است، تراکنش را primary
نهایی می شود
2-Near Sync:
اگر تغییراتی که
primary
برای
Standby
ارسال می کند، در بافرپول
standby
بنشیند، تراکنش در
primary
نهایی می شود.
3- Async:
primary
منتظر دریافت تاییدیه از
standby
نمی ماند.
4- Super Async:
standby
هر وقت که بخواهد لاگ تغییرات را دردریافت کرده و پردازش می کند.
HADR
peer window
مدت زمانی که باید منتظر بماند تا اگر
primary
بالا نیامد،
standby
را جایگزین کند.