Tuesday, December 27, 2011

Consistent copy

Сегодня занимался исследованием медленного UPDATE...

Вот как это происходит с точки зрения ОС:


[root@ODA01-pub1 ~]# pstack 11517

#0  0x000000000467fce0 in __intel_new_memcpy ()

#1  0x000000000467eaa8 in _intel_fast_memcpy.J ()

#2  0x0000000008f990f1 in kcrfw_copy_cv ()


#3  0x0000000008f95b78 in kcrfw_redo_gen ()

#4  0x0000000000e4540c in kcbchg1_main ()

#5  0x0000000008e0dbfb in kcbchg1 ()

#6  0x0000000008dcc876 in ktuchg2 ()

#7  0x0000000008dd7093 in ktbchg2 ()

#8  0x0000000008d8afef in kddchg ()

#9  0x000000000488ed65 in kdblccovwr ()

#10 0x00000000048908e8 in kdblcovw ()

#11 0x0000000008d82d52 in kduurp ()

#12 0x0000000008d7fb66 in kdusru ()

#13 0x0000000008d78c14 in kauupd ()

#14 0x0000000008f3f7f6 in updrow ()

#15 0x00000000023cd72c in qerupFetch ()

#16 0x0000000001e989ee in updaul ()

#17 0x0000000001e9686e in updThreePhaseExe ()

#18 0x0000000001e9616d in updexe ()

#19 0x0000000008ed2a96 in opiexe ()

Как оказалось, для создания консистентной копии блока на Intel-платформе Оракл в последних версиях (в данном случае в 11.2.0.2) использует команды

__intel_new_memcpy ()

_intel_fast_memcpy.J ()

которые копируют данные блоками по 16 байт через регистры SSE, что значительно ускоряет процесс копирования. 

Кроме того, создание консистентные копии блока при включенной NUMA-оптимизации Оракл вначале пытается локально (в локальной порции SGA). И если локально места нет, то идет в другие ноды и ищет свободные буферы глобально.

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Does DEALLOCATE UNUSED or SHRINK SPACE will free space occupied by LOB segment?

Lets check how it works. My env is DB 19.20@Linux-x64 1) I created the table with 4 LOB columns of 4 different LOB types: BASICFILE BLOB, BA...