Snapshot too old


#1

7 хоног бүр нэг их урт query уншуулдаг юм аа. Тэгсэн тэрний маань ажиллах хугацаа нэмэгдсээр нэмэгдсээр /query-нд өөрчлөлт ороогүй/ одоо дараах асуудалтай тулгарч үр дүнд хүрэхээ болилоо. Энэ асуудалд ямар шийдэл байж болох вэ? Google ахаас асуухаар UNDO_RETENTION параметрийн утгыг өөрчилөх гэсэн байх юм. Параметрийн утгыг өөрчилсөн тохиолдолд гарах муу үр дагавар юу байж болох вэ?

Алдааны мэдээлэл:

ORA-01555: snapshot too old: rollback segment number 25 with name “SYSSMU25$” too small.


#2

Эхлээд яагаад query чинь удаашраад байгаа учрыг нь л олох хэрэгтэй дээ. SQL-ээ optimize хийх, хандаж буй table-ууд дээр шаардлагатай index, partition ууд үүссэн байгаа эсэхийг нь шалгаарай.

Бааз дээр өөрчлөгдөж буй бүх мэдээлэл Rollback segment-руу хадгалагдаж байдаг. Хэрэв rollback segment-н хэмжээ дүүрсэн бол хуучин мэдээллээ дараад бичээд явчихдаг. Query чинь ажиллаж байх хооронд холбоотой table-ууд дээр орсон мэдээлэл rollback segment руу орох гэсэн чинь хэмжээ дүүрчихээд, өмнөх хэрэгтэй датагаа override хийчихээд байгаа болохоор ийм алдаа гардаг.

Хэрэв бүүр үр дүн гарч ирэхгүй байгаа бол undo_retention параметрийнхаа утгыг нэмэгдүүлээд үзэхгүй юу. Гэхдээ production орчинд шууд туршихыг бол зөвлөхгүй шүү. Тестийн сервертэй бол эхлээд тэрэн дээрээ туршиж байгаад хийсэн нь дээр байх.


#3

undo_retention утгыг ихэсгэнэ. Уг комманд ажиллах хугацаанаас их байх шаардагатай. Update,Insert үйлдэл их хийдэг комманд гэж ойлголоо. Мөн Undo tablespace -ийн хэмжээ болон undo tablespace -тэй хамаатай бусад тохиргоог анхаар. undo tablespace-д хадгалагдаж буй мэдээллүүд буцаж сэргэх боломж нь байхгүй болсноор дээрх алдаа гарна гэж товчхондоо ойлгож болно.


#4

Олон join-той select query юм аа. insert, update байхгүй. undo_retention-ны одоогийн утгыг яаж харах вэ? “show parameter undo” гэж харах нь зөв үү?


#5
show parameter undo

undo_retention гэж байгаа. секундээр харагдана.


#6

За UNDO_RETENTION утгыг өөрчлөөд хэрэггүйдээ.
Select query чинь их удаан уншаад байгаа учраас тухайн хугацаанд мэдээлэл өөрчлөгдөөд байгаатай холбоотой алдаа.
Түмэнзулийн хариултыг сайн хараарай ер нь бол аль болох query-гээ сайжруулах хэрэгтэй. боломжгүй бол табле дээрээ шаардлагатай индекс үүсгэж өгөөрэй.
Тусламж хэрэгтэй бол хандаж болно шүү.


#7

Яг өөрчилж болохгүй гэсэн үг биш. үнэхээр өөрчлөх шаардлага байгаа эсэхийг анализ хийж байж шийднэ. Query optimizer ууд ашиглаад үз, Tuning advisor ажлуулаад үз. UNDO analyzer гэж байгаа . Тэрийг ашиглаад бас харж болно. Тэгээд ер нь бол харагдана даа.
Undo дүүрсэн учраас л дээрх алдаа гарч байгаа юм. Тиймээс ч шийдэх арга нь ихэсгэх гээд Google хэлсэн байх. Нэг арга мөн нь мөн боловч зөв үү буруу юу гэдэг нь олон зүйлсээс шалтгаална. UNDO-ийн датафайл autoextend бол extend хийгдээд явна үгүй бол хуучин мэдээллийг дарж бичих эсвэл хүлээх эсэх нь UNDO GUARANTEE -с шалтгаална. Дарагдаж бичигдсэн хэсэг шаардагдах үед дээрх алдаа гарна. UNDO_RETENTION параметр i/o -д нөлөөлөх тул админууд хаширлаж байгаа байхаа. Тиймээс аль аль талаас нь судлаад тодорхойлсон нь дээр.

@unorbat -ийн оруулсан асуудлын хувьд query тэй холбоотой асуудал давамгайлсан нь дата ихсэх тусам хугацаа нь нэмэгдэж буй гэдэг дээр харагдаж байна. Тиймээс query ээ , бүтэц ээ харж янзлах хэрэгтэй. Partitioning, Indexing гэх мэт.
Товчхондоо @tumenzul товч тодорхой бичсэн байгаа. дээрээс нь нэмэхэд хэдэн advisor ашиглаад хар л гэж хэлье даа. Мөн insert update байхгүй бо result cache, parallel гээд зүйлс хэрэг болж магад…

UNDO -ийн талаар жаахан ойлголт өгөх талаас нь бичлээ.
Дараа query болон undo талаар бэлтгэж оруулнаа.