การแปลงสตรีมมิ่งฐานข้อมูล Firebird 2.5 เป็นรูปแบบ ODS12 (Firebird 3.0)

Firebird แต่ละเวอร์ชันจะมีรูปแบบโครงสร้างดิสก์ฐานข้อมูล O(n)D(isk)S(tructure) เป็นของตัวเอง รวมถึงเวอร์ชัน 2.5 เอ็นจิ้น Firebird สามารถทำงานร่วมกับ ODS ของเวอร์ชันก่อนหน้าได้ นั่นคือ เวอร์ชันใหม่เปิดฐานข้อมูลจากเวอร์ชันเก่าและทำงานในโหมดความเข้ากันได้ แต่เอ็นจิ้น Firebird 3.0 ใช้งานได้กับฐานข้อมูลในเวอร์ชัน ODS ของตัวเองเท่านั้น 12.0.

หากต้องการโยกย้ายไปยัง 3.0 ฐานข้อมูลจาก 2.5 จะต้องแปลงเป็นรูปแบบใหม่ผ่านการสำรอง/กู้คืน แน่นอน เราคิดว่าฐานข้อมูลถูกเตรียมไว้ก่อนหน้านี้สำหรับการแปลง - เช่น ข้อมูลเมตาและแบบสอบถามได้รับการตรวจสอบความเข้ากันได้กับ Firebird 3.0

หากคุณปฏิบัติตามแนวทางมาตรฐาน หมายความว่าคุณต้องสำรองข้อมูลในเวอร์ชัน 2.5 จากนั้นติดตั้ง 3.0 และทำการกู้คืน ขั้นตอนดังกล่าวยอมรับได้หากมีเวลาเพียงพอ แต่เมื่อย้ายฐานข้อมูลขนาดใหญ่หรือเมื่อย้ายฐานข้อมูลหลายโหลพร้อมกัน เมื่อหมดเวลา คุณสามารถใช้การแปลงแบบสตรีมซึ่งเร็วกว่า 30-40% วิธีการทำเช่นนี้ (ภายใต้ Windows และภายใต้ Linux) อ่านภายใต้การตัด

แนวคิดทั่วไปคือเราจะใช้ไปป์ไลน์เพื่อเร่งความเร็ว:

gbak -b … база25 stdout | gbak -c … stdin база30

Gbak จาก 2.5 สร้างการสำรองข้อมูลในรูปแบบเชิงเส้นและส่งไปยัง stdout ซึ่งจะรับ gbak จาก 3.0 ทันทีผ่าน stdin และสร้างฐานข้อมูลใหม่

จำเป็นต้องจัดระเบียบไปป์ไลน์ดังกล่าวด้วยวิธีการเข้าถึงแบบโลคัล (ไฟล์) เนื่องจากการเข้าถึงเครือข่าย (แม้ผ่านโลคัลโฮสต์) จะทำให้กระบวนการช้าลงอย่างมาก

เราไปดูรายละเอียดสำหรับ Windows และ Linux ด้านล่าง

Windows

ในกรณีของ Windows วิธีที่ง่ายที่สุดคือสร้าง Firebird แบบสแตนด์อโลนทั้งหมด สำหรับสิ่งนี้เราใช้ ไฟล์เก็บถาวรแบบฝัง Firebird 2.5, เปลี่ยนชื่อ fbemded.dll เป็น fbclient.dll, เพิ่ม gbak.exe และ (เป็นทางเลือก) isql.exe ยูทิลิตี้จากไฟล์เก็บถาวร "ปกติ" 2.5

Firebird 3.0 ใช้ ประกอบครั้งเดียว และไม่ต้องดัดแปลงใดๆ

เวอร์ชันที่น้อยที่สุด (ซึ่งไม่ต้องการการติดตั้งไลบรารีรันไทม์ VS2008/VS2010 บนระบบเป้าหมาย) ประกอบด้วยไฟล์ต่อไปนี้:

25/gbak.exe
25/fbclient.dll
25/firebird.conf
25/firebird.log
25/firebird.msg
25/ib_util.dll
25/icudt30.dll
25/icuin30.dll
25/icuuc30.dll
25/Microsoft.VC80.CRT.manifest
25/msvcp80.dll
25/msvcr80.dll

30/fbclient.dll
30/firebird.conf
30/firebird.msg
30/gbak.exe
30/ib_util.dll
30/icudt52.dll
30/icudt52l.dat
30/icuin52.dll
30/icuuc52.dll
30/msvcp100.dll
30/msvcr100.dll
30/intl/fbintl.conf
30/intl/fbintl.dll
30/plugins/engine12.dll

ผู้ดูแลระบบที่มีประสบการณ์อาจสังเกตเห็นว่า 2.5 ไม่มีไฟล์ intl/fbintl.dll และ intl/fbintl.conf นี่เป็นเรื่องจริง เนื่องจาก gbak ไม่ได้ใช้ชุดอักขระการเชื่อมต่อและไม่แปลงข้อมูลระหว่างชุดอักขระ แต่ในด้าน "รับ" ของ Firebird 3.0 ไฟล์เหล่านี้จำเป็นเมื่อสร้างดัชนี

ใน firebird.conf Firebird 3.0 แนะนำให้เพิ่ม:

MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

นอกจากนี้ ขอแนะนำให้ตั้งค่า IpcName ที่แตกต่างกันสำหรับ 2.5 และ 3.0

เมื่อเลือกค่าของพารามิเตอร์อื่นของ firebird.conf เราดำเนินการจากการพิจารณาอย่างง่าย: ในขั้นตอนการถ่ายข้อมูล gbak ทำงาน 2.5 ในกระบวนการหนึ่งและ 3.0 ในอีกกระบวนการหนึ่ง จากนั้น 2.5 ออกและ 3.0 เริ่มต้น สร้างดัชนี

เพื่อเร่งขั้นตอนการสร้างดัชนีใน 3.0 ขอแนะนำให้เพิ่มขนาดของพารามิเตอร์ TempCacheLimit เป็น ~40% RAM (แน่นอนว่าหากเป็นเซิร์ฟเวอร์เฉพาะ)

ตัวอย่างเช่น หากเซิร์ฟเวอร์มี RAM 16 GB คุณสามารถใส่ได้

TempCacheLimit=6G

แน่นอนว่าค่านี้สามารถตั้งค่าได้เฉพาะ Firebird 64 แบบ 3 บิตเท่านั้น เนื่องจากกระบวนการแบบ 32 บิตใดๆ ไม่สามารถจัดสรรหน่วยความจำได้มากกว่า 2 กิกะไบต์

ใน 2.5 พารามิเตอร์นี้ไม่จำเป็นต้องเปลี่ยน - ยังไงก็ไม่เกิน 2 กิกะไบต์และไม่ส่งผลต่อความเร็วระหว่างการสำรองข้อมูล

ก่อนดำเนินการ คุณต้องตรวจสอบว่าแคชเพจในส่วนหัวของฐานข้อมูลถูกตั้งค่าเป็น 0 (คำสั่ง gstat -h databasenameดูบรรทัดบัฟเฟอร์หน้า)

หากมีการตั้งค่าแคชอย่างชัดเจนในส่วนหัวของฐานข้อมูล แคชจะแทนที่ค่าจาก firebird.conf (และ databases.conf ใน 3.0) และในกรณีที่มีค่ามากไม่เพียงพอ อาจนำไปสู่การใช้หน่วยความจำมากเกินไปและการสลับ

ถัดไป คัดลอกไฟล์ไปยังระบบเป้าหมาย

การแปลงจะดำเนินการหลังจากหยุดบริการ Firebird 2.5 "ระบบ" บนบรรทัดคำสั่งที่มีสิทธิ์ยกระดับไปยังผู้ดูแลระบบภายใน (ตัวอย่าง):

set ISC_USER=владелец
"25/gbak" -z -b -g -v -st t -y 25.log база25 stdout|^
"30/gbak" -z -c -v -st t -y 30.log stdin база30

ตัวอย่างนี้ใช้ "forward slash" ในเครื่องหมายคำพูด ("unix-style" ที่ถูกต้อง) และ "hat" (อักขระ "^") หลีกอักขระขึ้นบรรทัดใหม่ ซึ่งมีประโยชน์เมื่อพิมพ์คำสั่งยาว ตัวเลือก -st(atus) ปรากฏใน Firebird 2.5.8 และอนุญาตให้คุณบันทึกข้อมูลเกี่ยวกับเวลาที่กระบวนการ gbak ทำงาน (สำหรับรายละเอียด โปรดดูเอกสารประกอบ)

ลินุกซ์

บน Linux Firebird 3 ขึ้นอยู่กับไลบรารี tommath บน CentOS (RHEL) ไลบรารีนี้อยู่ในที่เก็บ epel บน Ubuntu (Debian) ในที่เก็บระบบ

สำหรับ CentOS คุณต้องเชื่อมต่อ epel repository ก่อนแล้วจึงเชื่อมต่อ

yum install libtommath

Ubuntu ไม่จำเป็นต้องรวมที่เก็บข้อมูลเพิ่มเติม แต่ Ubuntu 16 และ Ubuntu 18 ติดตั้งแพ็คเกจเวอร์ชันต่างๆ - libtomath0 และ libtommath1 ตามลำดับ

Firebird 3.0 ค้นหา tommath.so.0 และสำหรับ Ubuntu 18 จำเป็นต้องสร้างลิงก์ (symlink) จาก tommath.so.0 ไปยัง tommath.so.1 เพิ่มเติม ในการทำเช่นนี้ คุณต้องหา tommath.so.1 ก่อน

ค้นหาเส้นทางใน Ubuntu - /usr/lib/x86_64-linux-gnu/แต่การแจกแจงตาม Debian อื่นๆ อาจแตกต่างออกไป

ปัญหาที่สองเกี่ยวข้องกับความจริงที่ว่าจนถึงและรวมถึง Firebird 3.0.1 ไม่มีวิธีง่ายๆ ในการติดตั้งเซิร์ฟเวอร์สองเวอร์ชันที่แตกต่างกัน เราไม่พิจารณาตัวเลือก "รวบรวมจากแหล่งที่มาด้วยคำนำหน้าที่จำเป็น" เนื่องจากความซับซ้อนที่เกี่ยวข้อง

สำหรับ Firebird 3.0.2 และสูงกว่าที่นำมาใช้ สร้างด้วย --enable-binreloc และตัวเลือกตัวติดตั้งแยกต่างหาก (-path เส้นทาง)

สมมติว่าไลบรารี tommath และถ้าจำเป็น มีการเพิ่ม symlink สำหรับ tommath.so.0 ลงในระบบ คุณสามารถติดตั้งการกระจาย Firebird 3.0.4 ปัจจุบัน (ในขณะที่เขียนบทความนี้) ใน /opt เป็นต้น /fb3:

./install.sh -path /opt/fb3

หลังจากนั้น คุณสามารถหยุดบริการระบบ Firebird และเริ่มการแปลงสตรีมได้

เมื่อหยุด Firebird โปรดทราบว่ากระบวนการ Firebid 2.5 ในโหมดคลาสสิกมักจะเริ่มต้นโดย xinetd ดังนั้นคุณต้องปิดใช้งานบริการ firebird สำหรับ xinetd หรือหยุด xinetd โดยสิ้นเชิง

ใน firebird.conf สำหรับ 3.0 บน Linux คุณไม่จำเป็นต้องตั้งค่าพารามิเตอร์ MaxUnflushed (ใช้งานได้เฉพาะบน Windows) และเปลี่ยนการตั้งค่า Firebird 2.5

ใน Linux การเข้าถึง Firebird 2.5 ในเครื่อง (ไฟล์) ไม่เทียบเท่ากับเวอร์ชันฝังตัวภายใต้ Windows - เซิร์ฟเวอร์ 2.5 จะทำงานในกระบวนการ gbak (โดยไม่มีส่วนเครือข่าย) แต่สิทธิ์การเข้าถึงจะถูกตรวจสอบกับฐานผู้ใช้ ซึ่งหมายความว่า ไม่เพียง แต่เข้าสู่ระบบเท่านั้น แต่ยังต้องใช้รหัสผ่านด้วย :

export ISC_USER=username ISC_PASSWORD=password
/opt/firebird/bin/gbak -b … база25 stdout
|/opt/fb3/bin/gbak -c … stdin база30

หลังจากการแปลงสำเร็จ คุณต้องถอนการติดตั้ง Firebird 3.0 "เพิ่มเติม" ก่อน จากนั้นจึงถอนการติดตั้ง Firebird 2.5 "หลัก" และหลังจากนั้นทำการติดตั้ง Firebird 2.5 ใหม่ทั้งหมด - และดีที่สุดจากโปรแกรมติดตั้ง tar.gz ปกติและไม่ผ่าน ที่เก็บเพราะ. เวอร์ชันในที่เก็บอาจล้าหลัง

นอกจากนี้ หลังจากกู้คืนฐานข้อมูลบน Linux และติดตั้งใหม่ คุณต้องตรวจสอบว่าผู้ใช้ firebird เป็นเจ้าของฐานข้อมูลใหม่หรือไม่

หากไม่ใช่ในกรณีนี้ จะต้องได้รับการแก้ไข

chown firebird.firebird database

ทั้งหมด

นอกจากการประหยัดเวลาและพื้นที่ดิสก์แล้ว การแปลงแบบสตรีมยังมีข้อได้เปรียบที่สำคัญอีกประการหนึ่ง นั่นคือ การแปลงฐานข้อมูลทำได้โดยไม่ต้องลบ Firebird 2.5 ที่มีอยู่ ซึ่งช่วยลดความยุ่งยากในการย้อนกลับในกรณีที่การแปลงไม่สำเร็จ (ส่วนใหญ่มักเกิดจากการไม่มีพื้นที่ว่างหรือการรีบูตโดยไม่คาดคิดระหว่างการย้ายข้อมูล กระบวนการ).

การประหยัดเวลาเกิดจากความจริงที่ว่าการแปลง "แบบคลาสสิก" คือ "เวลาสำรอง" บวกกับ "เวลากู้คืน" การกู้คืนประกอบด้วยสองส่วน: การอ่านข้อมูลจากไฟล์สำรองข้อมูลและการสร้างดัชนี

ด้วยการแปลงสตรีมมิ่ง เวลาทั้งหมดจะได้รับเป็น "เวลาสำรองบวกห้าถึงสิบเปอร์เซ็นต์" และ "เวลาสร้างดัชนี"

ผลลัพธ์ที่เฉพาะเจาะจงขึ้นอยู่กับโครงสร้างของฐานข้อมูล แต่โดยเฉลี่ยแล้ว เวลาในการกู้คืนจะอยู่ที่ประมาณสองเท่าของเวลาสำรอง ดังนั้น หากเราใช้เวลาสำรองเป็นหน่วย ดังนั้น "การแปลงแบบคลาสสิก" คือสามหน่วยเวลา การสตรีมคือสองหน่วยเวลา การเพิ่ม TempCacheLimit ช่วยลดเวลาได้มากขึ้น

โดยทั่วไป การแปลงสตรีมมิ่งในทางปฏิบัติช่วยให้คุณประหยัดเวลา 30-40% ของเวลาในการสำรองและกู้คืนสำรอง

คำถาม?

โปรดเขียนคำถามทั้งหมดในความคิดเห็น หรือส่งไปยังผู้เขียนวิธีการและผู้ร่วมเขียนบทความนี้ - Vasily Sidorov วิศวกรระบบชั้นนำของ iBase ที่ bs at ibase ru

เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้นที่สามารถเข้าร่วมในการสำรวจได้ เข้าสู่ระบบ, โปรด.

คุณใช้ Firebird เวอร์ชันใด

  • ไฟร์เบิร์ด 3.x

  • ไฟร์เบิร์ด 2.5

  • ไฟร์เบิร์ด 2.1

  • ไฟร์เบิร์ด 2.0, 1.5 หรือ 1.0

ผู้ใช้ 16 คนโหวต ผู้ใช้ 1 รายงดออกเสียง

ที่มา: will.com

เพิ่มความคิดเห็น