Сегодня занимался исследованием медленного 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.