ฉันใช้เซิร์ฟเวอร์ MySQL 5.5 บนเวิร์กสเตชันของฉันสำหรับการวิเคราะห์ข้อมูลทางวิทยาศาสตร์และสงสัยว่าจะกำหนดค่า MySQL อย่างไรเพื่อให้ได้ประสิทธิภาพที่ดีที่สุด ประเภทของแบบสอบถามที่ฉันใช้โดยทั่วไปเกี่ยวข้องกับการรวม 10-20 ตารางและสามารถทำงานได้ค่อนข้างนานหนึ่งถึงหลายนาทีโดยไม่มีข้อยกเว้นเลย มีผู้ใช้เพียงไม่กี่รายเท่านั้นที่เข้าถึงฐานข้อมูลในเวลาเดียวกัน (5 เป็นจำนวนสูงสุด) ฉันย้ายเซิร์ฟเวอร์จาก Lenovo Thinkpad T61 ด้วย Dual Core 2.2 GHz และ RAM 4 GB ไปยังเครื่องใหม่ที่มีส่วนประกอบที่เลือกด้วยมือ:
- Intel i7 3770, 4x 3.4 GHz (ทำงานที่ 4x3.7 GHz)
- ชิปเซ็ต Z77
- DDR3 1600 RAM 16 GB
- Windows 7 Prof 64-bit
- เซิร์ฟเวอร์ Windows และ MySQL ทำงานบนไดรฟ์ Intel 520 series SSD
การทดสอบครั้งแรก (การเรียกใช้คิวรีเดียวกันบนเครื่องทั้งสอง) แสดงการปรับปรุงที่ชัดเจนสำหรับความเร็วใหม่ แต่การสืบค้นยังคงใช้เวลานานและฉันคาดว่าจะได้รับการเพิ่มมากขึ้น แบบสอบถามที่มีปัญหานั้นได้รับการปรับให้เหมาะสมอย่างดีเช่นตารางทั้งหมดมีคีย์ที่เหมาะสมซึ่งใช้ในการ "อธิบายเพิ่มเติม"
ตอนนี้การตั้งค่า MySQL ปัจจุบันของฉัน: ครั้งแรกที่ฉันควรพูดถึงว่าฉันย้ายจาก MyISAM ไป Innodb นานมาแล้ว
my.ini tweaks ของฉันบางอย่าง (เช่นออกจากการตั้งค่าเริ่มต้น):
# Maximum size for internal (in-memory) temporary tables. If a table
# grows larger than this value, it is automatically converted to disk
# based table This limitation is for a single table. There can be many
# of them.
#tmp_table_size=35M
tmp_table_size=4000M
max_heap_table_size=4000M
# InnoDB, unlike MyISAM, uses a buffer pool to cache both indexes and
# row data. The bigger you set this the less disk I/O is needed to
# access data in tables. On a dedicated database server you may set this
# parameter up to 80% of the machine physical memory size. Do not set it
# too large, though, because competition of the physical memory may
# cause paging in the operating system. Note that on 32bit systems you
# might be limited to 2-3.5G of user level memory per process, so do not
# set it too high.
#innodb_buffer_pool_size=96M
innodb_buffer_pool_size=800M
general-log
expire_logs_days = 60
general_log_file = "F:/my_query_mysql.log"
log-output = TABLE
optimizer_search_depth = 0 #meant to cure the "statistics state" bug in some queries
ฉันต้องการที่จะรู้ว่าใครบางคนจะแนะนำการเปลี่ยนแปลงหมายเลขข้างต้นหรือแม้กระทั่งการตั้งค่าเพิ่มเติมที่ฉันไม่รู้จัก
ฉันขอขอบคุณคำพูดที่เป็นประโยชน์ใด ๆ
สตีฟ
แก้ไข: ฉันมีสองคำถามที่เกี่ยวข้องกับการเข้าร่วมใน 10-20 ตารางและวิ่งไปที่โน๊ตบุ๊ค Lenovo และพีซีใหม่ของฉัน Query # 1 ใช้เวลา 3m36s บนเครื่องใหม่เทียบกับ 9m11s บนแล็ปท็อป Query # 2 ใช้เวลา 22.5s บนเวิร์กสเตชันและ 48.5s บนแล็ปท็อป ดังนั้นความเร็วในการประมวลผลจึงเพิ่มขึ้นโดยประมาณ 2-2.5 บนเวิร์กสเตชันไม่มีการใช้ RAM แม้แต่ 50% โหลด CPU เฉลี่ยทั่วทั้งสี่แกน (ตามที่รายงานโดย Windows Task Manager) มีเพียงประมาณ 13% โหลดบนพื้นฐานต่อคอร์ (ตามรายงานโดย Core ชั่วคราว) ประมาณ 25-40% สำหรับหนึ่งคอร์ในขณะที่มันเป็น <= 10% สำหรับคนอื่น ๆ ที่ระบุว่า MySQL ไม่ได้ใช้หลายแกนสำหรับแบบสอบถามเดียว .