Cach├й DBMS 2013.1 рдореЗрдВ рдирдпрд╛: рд▓рд╛рдЗрд╡ рдХреНрд▓рд╛рд╕реЗрд╕ рдкрд░ рдЗрдВрдбреЗрдХреНрд╕ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдмрдирд╛рдирд╛

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд░реНрддреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕рдореЗрдВ рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрдХреНрд░рдорд┐рдд рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  1. рдЙрдирдХреА рдкреАрдврд╝реА рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдЙрддрдиреА рддреЗрдЬреА рд╕реЗ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП
  2. рддрд╛рдХрд┐ рдкреАрдврд╝реА рдХреЛ рдмреИрдЪреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
    рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ 300M рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реИ рдФрд░ рдЖрдк рдШрдВрдЯреЛрдВ рдХреЗ рдмрд╛рдж рд╣реА рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рддреАрди рд░рд╛рддреЛрдВ рдореЗрдВ 100M рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рд╛рде рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
  3. рдирдП рд╕реВрдЪрдХрд╛рдВрдХ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдФрд░ рдЙрдирдХреА рдкреАрдврд╝реА рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╡рд░реНрдЧ / рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдп рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдИ рднреА рдЬреНрдЮрд╛рдд рд╡рд┐рдзрд┐ % BuildIndices () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рд╣рдорд╛рд░реА рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рд░рд╛рд╕реНрддрд╛ рдХреНрдпрд╛ рд╣реИ?

рд╕рд┐рджреНрдзрд╛рдВрдд


рдПрдХ рдирдпрд╛ % Library.IndexBuilder рд╡рд░реНрдЧ Cach├й 2013.1 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА % ConstructIndicesParallel () рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рдеред
рдирд╛рдо рд╕реЗ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреАрдврд╝реА рд╕рднреА рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреА рднрд╛рдЧреАрджрд╛рд░реА рдХреЗ рд╕рд╛рде рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╣реЛрдЧреАред

рддреЛ, рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

ClassMethod % ConstructIndicesParallel ( pTaskId = "" , pStartId As% Integer = 0 , pEndId as % Integer = -1 , pSortBegin As% Integer = 1 , pDroneCount As% Integer = 0 , pLockFlag As% Integer = 0 , pLockFlag As% Integer = 1 , p1 = 1 p = 1 ) % рд╕реНрдерд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ



рдЕрднреНрдпрд╛рд╕


рдЕрдм рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, USER рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВ, рдЗрд╕реЗ 1M рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рд╛рде рд╡реЗрд░рд┐рдПрдмрд▓-рд▓реЗрдВрде рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ [1-100] рд╕реЗ рднрд░реЗрдВ, рдФрд░ рдХреНрд▓рд╛рд╕рд┐рдХ % BuildIndices () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рдПрдВ рддрд╛рдХрд┐ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реЛ:

рдХреНрд▓рд╛рд╕ рдбреЗрдореЛ.рдЯреЗрд╕реНрдЯ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд▓рдЧрд╛рддрд╛рд░% рд╣реИ
{

рд╕реВрдЪрдХрд╛рдВрдХ idxn n рдХреЗ рд░реВрдк рдореЗрдВ SQLUPPER ( 6 );

рдЧреБрдг n % рд╕реНрдЯреНрд░рд┐рдВрдЧ ( MAXLEN = 100 );

ClassMethod Fill ( n % Integer = 10000000 )
{
рд╕реЗрдЯ рдбреЗрдЯрд╛ = $ рдмрджрд▓реЗрдВ ( $ рдФрдЪрд┐рддреНрдп ( "" , 100), "" , "рдП" )
рд╕реЗрдЯ рд╕рдордп = $ ZHorolog
рдХрд░ рдпреЛрдЧреНрдп ^% NOJRN
рдХрд░реЛ .. % KillExtent ()
рд╕реЗрдЯ ^ рдбреЗрдореЛ .estD = n
рд╕реЗрдЯ ^ Demo.testD (1) = $ ListBuild ( "" , $ рдПрдХреНрд╕рдЯреНрд░реЗрдХреНрдЯ ( рдбреЗрдЯрд╛ , 1, $ рд░реИрдВрдбрдо (100% +1))
i = 2: 1: n рд╕реЗрдЯ ^ ( i ) = $ ListBuild ( "" , $ Extract ( рдбреЗрдЯрд╛ , 1, $ рд░реИрдВрдбрдо (100) +1))
рд╕рдХреНрд╖рдо рдХрд░реЗрдВ ^% NOJRN
"рдЗрдиреНрд╕рд░реНрдЯ =" рд▓рд┐рдЦреЗрдВ , $ ZHorolog - time , "secред" ,!
}

ClassMethod BIndex ()
{
рд╕реЗрдЯ рд╕рдордп = $ ZHorolog
рдХрд░реЛ .. % рдмрд┐рд▓реНрдбрдЗрдВрдбрд┐рд╕ (, 1,1)
"reindexing =" , $ ZHorolog - time , "secред" рд▓рд┐рдЦреЗрдВ ред ,!
}

}

рдореЗрд░реЗ рдкрд░рд┐рдгрд╛рдо:
USER>do ##class(demo.test).Fill()
= 9.706935 .

USER>do ##class(demo.test).BIndex()
= 71.966953 .

рдЕрдм рдирдП % IndexBuilder рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ:

  1. рдкрд╣рд▓реЗ, % PurgeIndices () рд╡рд┐рдзрд┐ (рд╡реИрдХрд▓реНрдкрд┐рдХ рдЪрд░рдг) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд┐рдЫрд▓реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░реЗрдВ
  2. % IndexBuilder рд╕реЗ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА
  3. INDEXBUILDERFILTER рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреА рд╕реВрдЪреА рд▓рд┐рдЦреЗрдВред
    рдпрджрд┐ рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдЦрд╛рд▓реА рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рднреА рдЕрдиреБрдХреНрд░рдорд┐рдд рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ
  4. рд╣рдорд╛рд░реЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЗ рд▓рд┐рдП рдЕрджреГрд╢реНрдп рдмрдирд╛ рджреЗрдВ рддрд╛рдХрд┐ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗ рдЬреЛ рдЕрднреА рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИред
    рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо $ System.SQL.SetMapSelectability () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

    ClassMethod SetMapSelectability ( pTablename as % Library.String = "" , pMapname as % Library.String = "" , pValue as % Boolean = "" ) % Library.Sring рдХреЗ рд░реВрдк рдореЗрдВ

    рддрд░реНрдХреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг:
    • pTablename - рдЯреЗрдмрд▓ рдХрд╛ рдирд╛рдо
    • pMapname - рд╕реВрдЪрдХрд╛рдВрдХ рдирд╛рдо
    • pValue - 0/1 рдзреНрд╡рдЬ рдЬреЛ SQL рдПрдЧреНрдЬреАрдХреНрдпреВрдЯрд┐рд╡ рдХреЗ рд▓рд┐рдП рдЗрдВрдбреЗрдХреНрд╕ рдХреА рджреГрд╢реНрдпрддрд╛ (1) рдпрд╛ рдЕрджрд░реНрд╢рди (0) рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ
    рдиреЛрдЯ: рдХрдХреНрд╖рд╛ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдк рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдЕрджреГрд╢реНрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
  5. % ConstructIndicesParallel () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ
  6. рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЛ рд╣рдорд╛рд░реЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рджреГрд╢реНрдпрдорд╛рди рдмрдирд╛рдПрдВ
  7. рд▓рд╛рдн!

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рд▓реЗрдЧреА:

рдХреНрд▓рд╛рд╕ рдбреЗрдореЛ.рдЯреЗрд╕реНрдЯ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ ( % рд╕реНрдерд╛рдпреА , % рдЗрдВрдбреЗрдХреНрд╕рдмреНрдпреБрд▓реЗрд░ )
{

рдкреИрд░рд╛рдореАрдЯрд░ INDEXBUILDERFILTER = "idxn" ;

рдкреИрд░рд╛рдореАрдЯрд░ BITMAPCHUNKINMEMORY = 0 ;

рд╕реВрдЪрдХрд╛рдВрдХ idxn n рдХреЗ рд░реВрдк рдореЗрдВ SQLUPPER ( 6 );

рдЧреБрдг n % рд╕реНрдЯреНрд░рд┐рдВрдЧ ( MAXLEN = 100 );
...
ClassMethod FastBIndex ()
{
рдХрд░реЛ .. % PurgeIndices ( $ ListBuild ( "idxn" ))
$ System .SQL рдХрд░реЛ ред SetMapSelectability ( $ classname (), "idxn" , $$$ NO )
рдХрд░реЛ .. % рдирд┐рд░реНрдорд╛рдг
$ System .SQL рдХрд░реЛ ред SetMapSelectability ( $ classname (), "idxn" , $$$ YES )
}
}

рдореЗрд░реЗ рдкрд░рд┐рдгрд╛рдо:
USER>do ##class(demo.test).FastBIndex()

Building 157 chunks and will use parallel build algorithm with 4 drone processes.
SortBegin is requested.
Started drone process: 3812
Started drone process: 4284
Started drone process: 7004
Started drone process: 7224
Expected time to complete is 43 secs to build 157 chunks of 64,000 objects using 4 processes.
Waiting for processes to complete....done.
Elapsed time using 4 processes was 34.906643.

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЧрддрд┐ рджреЛрдЧреБрдиреА рд╣реЛ рдЧрдИ рд╣реИред

рдЖрдкрдХреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдФрд░ рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рдкрд░, рдкрд░рд┐рдгрд╛рдо рдФрд░ рднреА рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдФрд░ рднреА рддреЗрдЬ?


рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЗ рдЙрддреНрдерд╛рди рдореЗрдВ рдФрд░ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ?
рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реНрдЯреЙрдХ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд░реИрдо рд╣реИ, рддреЛ рд╣рд╛рдБред

рд╕реВрдЪрдХрд╛рдВрдХ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдЖрдВрддрд░рд┐рдХ рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рддрдерд╛рдХрдерд┐рдд рдмрд┐рдЯрдореИрдк рдмреНрд▓реЙрдХ рдмрдирд╛рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╡реЗ рдирд┐рдЬреА рдЧреНрд▓реЛрдмрд▓реНрд╕ рдХреЛ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди BITMAPCHUNKINMEMORY рдмреВрд▓рд┐рдпрди рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ RAM рдореЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ 1 рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ RAM рдХреЛ рдереЛрдбрд╝рд╛ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдиреБрдХреНрд░рдорд┐рдд рдмрдбрд╝реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ <STORE> рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, BITMAPCHUNKINMEMORY 0 рд╣реИред

Source: https://habr.com/ru/post/In173739/


All Articles