แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - มนตรี บอยรักยุ้ยคนเดียว

หน้า: 1 ... 3 4 [5]
201
Networking / Raid 10
« เมื่อ: ธันวาคม 31, 2008, 23:44:22 PM »
ข้อเปรียบเทียบ

202
HOSxP PCU / คำสั่ง update ใน pcu เชิงรุก 1
« เมื่อ: ธันวาคม 31, 2008, 21:26:53 PM »
ต้องระวังนะครับคำเตือน

สิทธิ์ประกันสังคม
update hipdata
set pttype = '14'
where moi_status in('SSS') and hospmain not in ('10731','10732')

update hipdata
set pttype = '34'
where moi_status in('SSS') and hospmain in ('10731')

update hipdata
set pttype = '34'
where moi_status in('SSS') and hospmain in ('10732')

203
เป็นมา 2 วันแล้วครับ

204
MySQL / MySQL Config ยังไงดี? (มีคำตอบ)
« เมื่อ: ธันวาคม 27, 2008, 21:07:26 PM »
MySQL นับว่าเป็นหัวใจของ Web Server อีกตัวหนึ่งเลยก็ว่าได้เพราะว่า MySQL นั้นเป็นแหล่งข้อมูลที่สามารถเรียกใช้งานได้อย่างรวดเร็ว วันนี้ผมจะเอาประสบการณ์เกี่ยวกับการ Config MySQL มาให้อ่านกัน

ผมอิงตามรุ่น 4.1 โดยใช้กับ Server ที่ใช้ tis620 เป็น Default นะครับ

เริ่มต้นที่การ Compile PHP ให้สนับสนุน MySQL
ปกติ แล้วสามารถ Compile PHP ให้สนับสนุน MySQL ด้วยการใช้ --with-mysql วิธีการนี้จะเป็นการใช้ MySQL Lib Client ที่ Bundle มากับ PHP ครับ ซึ่งเป็น Version เก่า นอกจากนี้ยังมี Extension ใหม่ชื่อ MySQLi  ซึ่งถ้าจะใช้ MySQLi จะไม่สามารถใช้ MySQL Lib Client ที่ Bungle มาด้วยได้ มันจะตีกัน ดังนั้นเริ่มต้นผมแนะนำให้คุณ Compile PHP ด้วย --with-mysql=/usr/local/mysql (หรือถ้า mysql อยู่ที่อื่นก็ใช้ path อื่นแล้วกันครับ)

เพื่อความสะดวกในการใช้งานภาษาไทย มักจะ setup ใน my.cnf ว่า default-character-set = tis620 วิธีการนี้จะทำให้ MySQL ทำงานช้าลงไปประมาณ 20 - 30% แต่ไม่เป็นไรครับ เพราะว่ายังไงผมก็ต้องใช้ภาษาไทยอยู่แล้ว

หลังจากใส่คำสั่งว่า default-character-set = tis620 ลงไปใน my.cnf แล้ว ผมที่ได้คือ MySQL Client มันต๊องครับ เพราะว่า Charset ของ Server เป็น tis620 แต่ของ Client เป็น Latin ครับ ดังนั้นต้อง setup เพิ่มอีกตัวหนึ่งคือ skip-character-set-client-handshake ใส่ส่วน my.cnf ครับ วิธีการนี้จะทำให้ Client ทำงานที่ Charset เดียวกับ Server เลยครับ :)

skip-locking - อันนี้ถ้าจำไม่ผิดเขาเปลี่ยนชื่อเป็น skip-external-locking เกี่ยวกับการทำ Repicate MySQL Server ผมไม่แน่ใจว่าถ้ามี Server เดียวจะช่วยเพิ่มประสิทธิภาพอะไรได้หรือเปล่า แต่ใส่ไว้ก็ไม่เสียหายครับ

skip-thread-priority - เป็นการกำหนดครับว่าไม่ต้องให้ thread แซงคิวกันได้ MySQL จะให้ QUERY แต่ละแบบมีความสำคัญไม่เท่ากัน ผมจำไม่ได้ว่าอะไรมากกว่าอะไร แต่การเอาหัวข้อนี้ออกทำให้ระบบ queue ของ MySQL ไม่ต้องมายุ่งยากกับการจัดคิวและทำงานเป็น FIFO แทนครับ

skip-bdb - ไม่ได้ใช้ก็ข้ามไปครับ ถ้าใช้ bdb ก็ Comment บรรทัดนี้ซะ สำหรับผมแล้วผมใช้แค่ MYISAM กับ INNODB ครับ

skip-networking - อันนี้เป็นการบอก MySQL Server ว่าไม่ต้อง Listen ที่ INET SOCKET ครับ ให้ Listen ที่ UNIX SOCKET อย่างเดียวพอ อันนี้ไม่ได้เพิ่มความเร็วมากนัก แต่ลดโอกาสการโดนโจมตีได้ครับ

log-slow-queries - อันนี้ใช้เฉพาะเวลาที่ต้องการดูว่า Query อันไหนทำงานช้า จะได้มาปรับแต่งได้ครับ

การบริหาร Thread - ตัวแปรเกี่ยวกับ Thread ที่สำคัญของ MySQL คือ thread_cache ตัวแปรนี้จะเป็นการไม่ทำลาย thread ของ MySQL ให้ต่ำกว่าเลขนี้ครับ ปกติก็เดาไปเรื่อยๆ ครับ โดยดูจาก Status ของ MySQL ผมแนะนำให้ดูจาก phpMyAdmin ครับ สะดวกดี จะมีค่าเกี่ยวกับ thread คือ

Threads cached       143
Threads connected      7
Threads created      532
Threads running      1

Threads cached - คือจำนวน threads ที่อยู่ในโปรแกรม MySQL ตอนนี้ จะเห็นได้ว่ามี 143 threads
Threads connected - คือจำนวน threads ที่ใช้งานจริงๆ ครับ
Threads running - คือ threads ที่กำลังหาผลการ Query อยู่ครับ
Threads created - คือจำนวน threads ที่สร้างใหม่ตั้งแต่เริ่ม Server มาครับ ถ้าค่านี้เพิ่มเร็วเกินไป ให้เพิ่มจำนวน Thread_cache ครับ ผลที่ได้คือ MySQL จะทำงานเร็วขึ้นนิดหน่อยเพราะว่าจะไม่ต้องเสียเวลา สร้างและทำลาย Threads บ่อยๆ ครับ
ภาคที่ 3

MYISAM กับหน่วยความจำ ตัวแปรที่เราสนใจคือ

key_buffer=32M
sort_buffer_size=1M
read_buffer_size=1M
read_rnd_buffer_size=4M

- Key Buffer คือพื้นที่สำหรับ Cache ค่า Key ของแต่ละ Table ครับ โดยที่ Key ของ MySQL มี 3 ตัวคือ PRIMARY, INDEX และ UNIQUE ครับ ปกติถ้ามีการใช้ Table MyISAM มากๆ ค่านี้ควรจะมากๆ ครับ ของผมมีใช้ไม่มากเลยไม่ต้องใช้ค่า Key_Buffer มาก แนะนำ 16MB สำหรับแรม 256 และเพิ่มมากขึ้นเมื่อแรมมากขึ้น

- Sort Buffer คือหน่วยความจำที่ MySQSL แต่ละ Connection จะจองเพิ่ม เพื่อทำ Table Scan ครับ ปกติถ้าคุณจะ Sort Field ที่ไม่ใช่ Key จะต้องใช้หน่วยความจำส่วนนี้เสมอ ให้ Setup เริ่มต้นตั้งแต่ 512K ขึ้นไป เนื่องจากเป็นหน่วยความจำที่จะมีการจองเพิ่มต่อ Connection ดังนั้นจะไม่ควรจะ Setup ให้สูงเกินเพราะว่าจะทำให้ MySQL ทำงานจนหน่วยความจำหมด

- Read Buffer คือหน่วยความจำที่ MySQL จะใช้ในการเก็บค่าที่อ่านจากตารางแบบต่อเนื่อง (คือไม่ได้ Sort) ไม่จำเป็นต้องมากนักก็ได้ เพราะว่าปกติเราจะมีการทำ LIMIT ในการอ่านค่ามาแสดงบนเว็บอยู่แล้ว

- Read-Random Buffer Size คือหร่วมความจำที่ MySQL จะใช้เก็บค่าจากตารางแบบไม่ต่อเนื่อง (เช่นผลการ Sort)  ควรจะใหญ่กว่า Read Buffer

ของผมไม่ค่อยได้ใช้ MyISAM ค่าต่างๆ นี้เลยไม่ได้ Set เอาไว้มากนัก ครับ
ในภาดนี้เราจะพูดถึง tmp_table ปกติแล้วในการ Complex Query นั้น MySQL จะทำการสร้างตารางผลลัทธ์ขึ้นมาในหน่วยความจำเป็น เป็น TABLE แบบ HEAP แต่ถ้าตารางมีขนาดใหญ่กว่าค่าค่าหนึ่ง MySQL จะคัดลอกตารางนั้นลง Disk เป็น MyISAM TABLE ครับ เราจะมาดูค่าค่านั้นกันครับ

ก่อนที่จะไปไกล กว่านั้น เรามาพูดถึง Complex Query ก่อนครับ โดยมากเราจะพูดถึง Query ที่มีการใช้ GROUP BY, UNIQUE, LIKE และที่ไม่แน่ใจคือ SUB SELECT ครับ

วิธีการดูว่ามีการ Swap ลงหน่วยความจำมากน้อยแค่ไหน สามารถดูได้จาก
Created tmp disk tables       14652
Created tmp tables      222220

โดย เมื่อมีการสร้าง tmp_table MySQL จะเพิ่มค่า Created tmp tables ครับ และถ้ามีการ Swap ลง Disk จะเพิ่มค่า Created tmp disk tables ปกติ ถ้านำสองค่านี้มาหารกัน คูณ ร้อย ไม่ควรจะเกิน 5-10% ครับ ขึ้นอยู่กับว่าตารางที่คุณใช้ใหญ่เล็กอย่างไร มีความซับซ้อนมากแค่ไหน

ตัวแปรที่จะควบคุมการ Swap จะมี 2 ตัวคือ

tmp_table_size=32M
max_tmp_tables=32

โดย ถ้า tmp_table ใหญ่กว่า tmp_table_size จะ Swap ลง Disk ครับ หรือถ้ามีจำนวน tmp_table มากกว่า max_tmp_tables ก็จะ Swap ลง Disk เช่นกันครับ
ค่า tmp_table_size ปกติเป็น 32M และ max_tmp_tables จะเป็น 32 ครับ คุณไม่ควร Setup ให้สูงกว่า 2 เท่าของค่าปกติ แต่แนะนำให้ลองไปตรวจสอบครับว่าโปรแกรมของคุณมีทางที่จะ Optimize Query ได้มากแค่ไหน หรือ จะใช้วิธีการ Cache ผมลัพธ์ของหน้าเว็บเข้ามาช่วยก็ได้ครับ
ภาคที่ 5 - Key Buffer แบบเชิงลึก

Key Buffer คือหน่วยความจำที่ MySQL จองไว้หนเดียว แล้วใช้งานแชร์กันทุกๆ Process (ดังที่ได้พูดไว้ก่อนหน้านี้ครับ)

แต่เราจะมาพูดถึงประสิทธิภาพของ Key กันครับ ค่าที่น่าสนใจคือ

Key blocks unused   27683
Key blocks used   1312
Key read requests   1318393
Key reads   1344

คู่ แรกจะบอกว่า Key Buffer ของคุณใช้งานไปมากน้อยแค่ใด ปกติแล้ว Key Blocks Unused จะไม่มากครับหรือเป็น 0 เลยก็ได้ อย่างตัวอย่างแสดงว่าเรากำหนดค่า Key_Buffer มากเกินไปครับ

คู่ที่สองถ้าเอา (Key read requests - Key reads) * 100 / Key read requests เราจะเรียกว่า Key Hits Rate ครับ อย่างตัวอย่างคือ 99.9 ครับ แสดงว่า Key Hits Rate ดีมากครับ ปกติแล้วจะอยู่ที่ประมาณ 95 - 99% ครับ ถ้าน้อยกว่านี้แนะนำให้เพิ่ม Key_Buffer ครับ สำหรับ Key Hits Rate นั้นจะต้องคิดเมื่อทำงาน MySQL
ภาคที่ 6 - Table Cache

สำหรับ Table Cache นั้นเป็นการเปิด Handle ของ Table ทิ้งเอาไว้ครับ เพื่อการเข้าถึงข้อมูลใน Table ได้อย่างรวดเร็วครับ แต่ถ้าคุณเพิ่มค่านี้มากๆ คุณอาจจะเกิดปัญหาว่า File Descriptor ไม่พอครับ ถ้าผมจำไม่ผิดแนะนำให้เพิ่ม File Descriptor ได้จากการแก้ไขตัวแปร Kernel ที่ /proc/sys/fs/file-max ครับโดยการใช้คำสั่ง

echo 392604 > /proc/sys/fs/file-max

ผมไม่แน่ใจว่าการใช้คำสั่ง ulimit จะได้ผลเหมือนกันหรือไม่

กลับ มาต่อที่ table_cache ปกติแล้วถ้าในระบบที่มีตารางมากๆ table_cache ควรจะครอบคลุมตารางพื้นฐานทั้งหมด และอีกประมาณ 50% ของตารางที่เหลือ แต่ถ้าเป็นไปได้จะครอบคลุมทั้งหมดเลยก็ไม่ผิดแต่อย่างใด อย่างของผมเอง set ไว้ที่ 1024 เลยครับ

วิธีการจะดูว่า set ไว้น้อยเกินไปหรือเปล่า ให้ดูที่

Open tables   1024
Opened tables   1120

โดย Open tables คือจำนวน Table ที่เปิดอยู่ขณะนี้ และ Opened tables คือจำนวน Table ที่เปิดมาทั้งหมด นับตั้งแต่เริ่ม MySQL Server มา โดยถ้าค่าของ Opened tables เพิ่มเร็วเกินไป แนะนำให้เพิ่มค่า table_cache ครับ

วิธีการปรับค่า table cache ทำได้โดย เพิ่มบรรทัดนี้ใน my.cnf

table_cache=1024
ภาคที่ 7 Query Cache

Query Cache นั้นเป็นคุณสมบัติใหม่ที่มีใน MySQL รุ่นที่ 4.x ขึ้นมาครับ

Query Cache ทำงานง่ายๆ คือ ถ้ามี Query เหมือนเดิม MySQL จะเรียกจาก Cache แทนที่จะไป Query ใหม่ครับ

แต่ Query Cache ไม่ได้มีประโยชน์กับทุก Database Structure นะครับ Query Cache เหมาะกับ Table ที่ไม่ค่อยได้ Update แต่มีจำนวน Records เป็นจำนวนมาก เช่น 50,000 records ขึ้นไป Query Cache จะใช้กับ Select เท่านั้นครับ ถ้าระบบของคุณแตกต่างจากนี้การใช้ Query Cache อาจจะทำให้ได้ผลตรงกันข้ามก็ได้ครับ

วิธีการเปิดใช้งาน Query Cache ให้ใส่บรรทัดนี้ลงใน my.cnf ครับ

query_cache_type=1
query_cache_size=32M

query_cache_type จะมีได้ 3 ค่าคือ
0 - ปิด Query Cache
1 - เปิด Query Cache คุณสามารถสั่งให้ไม่ต้อง Cache ได้โดยการใช้ "SELECT SQL_NO_CACHE"
2 - แบบ On Demand คุณสามารถสั่งให้ MySQL Cache โดยการใช้ "SELECT SQL_CACHE"

ปกติ แล้วถ้า Table มีการ Update แล้ว MySQL จะลบ Cache ของ Table นั้นๆ ทั้งหมดทันที และ Query Cache นั้นเป็น Case Sensitive ครับ ดังนั้น

SELECT * FROM a WHERE b=1

กับ

select * from a where b=1

จะไม่เหมือนกันนะครับ ถ้าเราเรียกตัวแรกแล้วเรียกตัวที่ 2 ตัวที่ 2 จะไม่ได้เรียกจาก Cache

ดังนั้นถ้า
1. ในระบบของคุณมีการเขียน SQL แบบไม่ได้วางแผนเรืองตัวใหญ่ตัวเล็ก คุณจะได้รับประโยชน์จาก Query Cache น้อยลง
2. ถ้า Table หลักๆ ของคุณมีการ Update ตลอดเวลา คุณจะได้รับประโยชน์จาก Query Cache น้อยลง
3. ถ้า Table หลักๆ ของคุณไม่ได้มีจำนวน Records มากคุณก็แทบจะไม่ได้รับประโยชน์จาก Query Cache เลยครับ
ลืมไปครับเรื่อง Query Cache Performance ครับ

ปกติแล้วการใช้ Query Cache อย่างมีประสิทธิภาพ จะต้องมีการใส่ SELECT SQL_NO_CACHE ลงไปใน Query ที่ไม่ต้องการให้ MySQL ทำ Cache เพื่อเพิ่มประสิทธิภาพครับ ลองดู สถานะของ MySQL ตรงส่วน Query Cache กันนะครับ

Qcache free blocks   5184
Qcache free memory   17279864
Qcache hits   40606913
Qcache inserts   9779896
Qcache lowmem prunes   1096040
Qcache not cached   279265
Qcache queries in cache   10391
Qcache total blocks   26226

ค่า ที่สำคัญคือ Inserts กับ Hits ครับ ถ้ายังงี้คือ Hits ประมาณ 4 เท่าของที่ Insert เข้าไปนะครับ สำหรับผมแล้วถือว่าไม่ดีครับ น่าจะได้ประมาณ 10-20 เท่า คาดว่าในระบบของผมมี Table ที่ต้องการการ Update มากเกินไปทำให้ Query Cache ไม่ได้ประสิทธิภาพอย่างเต็มที่ครับ
ลืมไปครับเรื่อง Query Cache Performance ครับ

ปกติแล้วการใช้ Query Cache อย่างมีประสิทธิภาพ จะต้องมีการใส่ SELECT SQL_NO_CACHE ลงไปใน Query ที่ไม่ต้องการให้ MySQL ทำ Cache เพื่อเพิ่มประสิทธิภาพครับ ลองดู สถานะของ MySQL ตรงส่วน Query Cache กันนะครับ

Qcache free blocks   5184
Qcache free memory   17279864
Qcache hits   40606913
Qcache inserts   9779896
Qcache lowmem prunes   1096040
Qcache not cached   279265
Qcache queries in cache   10391
Qcache total blocks   26226

ค่า ที่สำคัญคือ Inserts กับ Hits ครับ ถ้ายังงี้คือ Hits ประมาณ 4 เท่าของที่ Insert เข้าไปนะครับ สำหรับผมแล้วถือว่าไม่ดีครับ น่าจะได้ประมาณ 10-20 เท่า คาดว่าในระบบของผมมี Table ที่ต้องการการ Update มากเกินไปทำให้ Query Cache ไม่ได้ประสิทธิภาพอย่างเต็มที่ครับ

ที่มา:http://www.thaiadmin.org/board/index.php?action=printpage;topic=18693.0

205
รับรองว่าหลายๆคนต้องเคยเจอปัญหากับภาษาไทยเป็นเครื่องหมายคำถาม ??
ซึ่งสาเหตุมีเพียงเรื่องเดียวคือเรื่องของ charset ของ database
แต่เอ๊ะ ทำไมแก้ยังไงก็ไม่ได้ซะที ทั้งๆที่โฮสเก่าก็ใช้ได้ แต่โฮสใหม่ก็ทำเหมือนๆกันแต่ใช้ไม่ได้
มาดูกันครับว่าอะไรเป็นอะไร

เริ่มต้นตั้งแต่การติดตั้ง mysql
ใน การติดตั้ง mysql-server นั้นหากไม่มีการระบุ charset ใดๆ ก็จะมี default charset เป็น latin1_swedish_ci หากมีการระบุตอน compile ก็จะเป็น charset ตามที่ระบุไว้
อย่างไรก็ดีค่า default-charset สามารถเปลี่ยนแปลงภายหลังได้โดยการระบุไว้ในไฟล์ my.cnf
เมื่อ เราทำการสร้าง database ใหม่ database ก็จะมี charset ตามค่า default ในไฟล์ my.cnf หรือถ้าใน my.cnf ไม่มีการระบุก็จะเป็นค่า default ตอน compile

compile php with mysql
ในการ compile php นั้นเราจะต้อง configure --with-mysql=path เมื่อ compile เสร็จแล้ว สิ่งที่ได้รับคือ php จะทำการ connect mysql ด้วย charset ตามค่า default charset ของ mysql lib ซึ่งจะไม่สามารถเปลี่ยนได้ด้วย my.cnf หรือ php.ini

การตั้งค่าและการใช้งาน
แบบที่ 1
-- compile mysql เป็น default charset latin1
-- ไม่มีการกำหนด default charset ใน my.cnf
-- สร้าง database ใหม่ก็จะได้ charset เป็น latin1
-- เวลาใช้งาน php ก็ connect ด้วย charset latin1 ตาม mysql lib
-- ผลลัพธ์คือ การเก็บข้อมูลแบบ ascii ในตารางแบบ ascii
-- การใช้งานหน้าเว็บ ปกติ (encoding tis-620 หรือ windows-874)
-- phpmyadmin เวอร์ชั่น 2.5 แสดงผลเป็นภาษาไทย
-- phpmyadmin เวอร์ชั่น >2.7 แสดงผลเป็น ascii encoding iso-8559-1

แบบที่ 2
-- compile mysql เป็น default charset latin1
-- แล้วกำหนด default charset ใน my.cnf เป็น utf8
-- สร้าง database ใหม่ก็จะได้ charset เป็น utf8 ตาม my.cnf
-- แต่เวลาใช้งาน php ดัน connect ด้วย charset latin1 ตาม mysql lib
-- ผลลัพธ์คือ การเก็บข้อมูลแบบ ascii ในตารางแบบ unicode
-- การใช้งานหน้าเว็บ ปกติ (encoding tis-620 หรือ windows-874)
-- phpmyadmin เวอร์ชั่น 2.5 แสดงผลเป็นภาษาไทย
-- phpmyadmin เวอร์ชั่น >2.7 แสดงผลเป็น ascii encoding iso-8559-1

แบบที่ 3
-- compile mysql เป็น default charset utf8
-- กำหนดหรือไม่กำหนด default charset ใน my.cnf เป็น utf8 ก็ได้
-- สร้าง database ใหม่ก็จะได้ charset เป็น utf8
-- เวลาใช้งาน php ก็ connect ด้วย charset utf8 ตาม mysql lib
-- ผลลัพธ์คือ การเก็บข้อมูลแบบ unicode ในตารางแบบ unicode
-- การใช้งานหน้าเว็บ ปกติ (encoding utf-8)
-- phpmyadmin เวอร์ชั่น 2.5 แสดงผลเป็น ??
-- phpmyadmin เวอร์ชั่น >2.7 แสดงผลเป็น ภาษาไทย

แบบที่ 4
-- compile mysql เป็น default charset utf8
-- กำหนดหรือไม่กำหนด default charset ใน my.cnf เป็น utf8 ก็ได้
-- สร้าง database ใหม่ก็จะได้ charset เป็น utf8
-- เวลาใช้งาน php ก็ connect ด้วย charset utf8 ตาม mysql lib
-- ผลลัพธ์คือ การเก็บข้อมูลแบบ unicode ในตารางแบบ unicode
-- การใช้งานหน้าเว็บไปใช้กับระบบที่เป็น encoding tis-620
-- phpmyadmin เวอร์ชั่น 2.5 แสดงผลเป็น ??
-- phpmyadmin เวอร์ชั่น >2.7 แสดงผลเป็น ภาษาไทย
หมาย เหตุ: แก้ encoding หน้าเว็บเป็น utf-8 ก็จะใช้งานได้ปกติ แต่จริงๆคือการเอา script แบบ ascii มาใช้ในระบบ unicode ผลที่จะตามมาคือขนาดของ field ในแต่ละตารางจะกำหนดไว้สั้นเกินไปเนื่องจาก utf-8 ใช้เนื้่อที่มากกว่าแบบ ascii 3 เท่า

แบบที่ 5
-- compile mysql เป็น default charset latin1
-- แล้วกำหนด default charset ใน my.cnf เป็น utf8
-- รวมถึงกำหนด init ใน my.cnf เป็น utf8 ด้วย
Code:

init-connect='SET collation_connection = utf8_general_ci'
init-connect='SET NAMES utf8'

-- สร้าง database ใหม่ก็จะได้ charset เป็น utf8 ตาม my.cnf
-- และเวลาใช้งาน php จะ connect ด้วย utf8 ตาม init-connect ใน my.cnf
-- ผลลัพธ์คือ การเก็บข้อมูลแบบ unicode ในตารางแบบ unicode
-- การใช้งานหน้าเว็บ ปกติ (encoding utf-8)
-- phpmyadmin เวอร์ชั่น 2.5 แสดงผลเป็น ??
-- phpmyadmin เวอร์ชั่น >2.7 แสดงผลเป็น ภาษาไทย

ขอแสดงตัวอย่างแค่ 5 แบบที่น่าจะพบมากที่สุดพอครับ

ผลกระทบ
ใน แต่ละแบบจะเห็นว่าระบบจะบังคับการใช้งานไปใน charset ใด charset หนึ่ง ซึ่งหากต้องการใช้งานระบบที่ต่างจาก default charset  ที่ตั้งค่าไว้ จะต้องกำหนดใน code php หลังจากทำการ connect และ select database แล้ว ดังนี้
Code:

mysql_query("SET NAMES 'charset_name' COLLATE 'collation_name';");
เช่น
mysql_query("SET NAMES 'utf8' COLLATE 'utf8_general_ci';");
หรือ
mysql_query("SET NAMES 'tis620' COLLATE 'tis620_thai_ci';");
หรือ
mysql_query("SET NAMES 'latin1' COLLATE 'latin1_swedish_ci';");


การแก้ปัญหา
สำหรับ ระบบที่ติดตั้งใหม่ ไม่น่าจะมีปัญหามากนัก หากติดตั้งแล้วไม่แสดงผลอย่างที่ควรเป็น ก็ให้ตรวจสอบ collation ของ Database ที่สร้างใหม่ให้ตรงกับที่ต้องการก่อนที่จะทำการติดตั้ง script และก็ให้ทำการเพิ่มคำสั่ง
Code:

mysql_query("SET NAMES 'charset_name' COLLATE 'collation_name';");

เข้าไปก็น่าจะหมดปัญหา

สำหรับ ระบบที่ใช้งานอยู่แล้วไม่มีปัญหาแต่มีปัญหาตอนย้ายโฮส ก็คงต้องหาข้อแตกต่างระหว่าง 2 server ออกมา โดยไล่ดูการตั้งค่าต่างๆของทั้ง 2 server ดังนี้
-- default charset ของ mysql lib
-- default charset ใน my.cnf
-- มีการกำหนด init connect ใน my.cnf หรือไม่
-- php connect ด้วย default charset อะไร
-- Database ที่สร้างไว้มี collation อะไร
-- Table ต่างๆใน database มี charset อะไร สอดคล้องกับ collation หรือไม่
-- ข้อมูลที่เก็บอยู่ใน table เก็บลักษณะใหน charset อะไร แสดงผลถูกต้องหรือไม่ (ทั้ง phpmyadmin และ หน้าเว็บ)
-- หน้าเว็บแสดงผลด้วย encoding อะไร
-- ข้อมูลที่ export ออกมาเป็น .sql export ด้วยวิธีใหน mysqldump, phpmyadmin เวอร์ชั่นอะไร, bigdump, ...
-- ไฟล์ .sql เปิดอ่านด้วย text editor อ่านออกหรือไม่ (แนะนำให้ใช้ notepad++ แล้วลองเปลี่ยน Format / Encoding ดูด้วย)


อ่านเรื่อง charset เพิ่มเติมได้ที่ http://www.thaihosttalk.com/th1/index.php?topic=6764.msg63194#msg63194
บทความที่เกี่ยวข้อง http://www.itwizard.info/technology/MySQL/MySQL_with_thai.html

206
Linux / เอาคู่มือ set linux มาฝาก
« เมื่อ: ธันวาคม 27, 2008, 19:35:23 PM »
ผมจำไม่ได้ว่าเอามาจากไหน แต่อ่านแล้วเข้าใจง่ายเลยนำมาฝากกัน

207
ลอง downoad จากที่นี่ เสร็จแล้วโทรหาผมนะครับ
http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=3164.0
มีวิธีนำเข้าและโปรแกรม

208
แจ้ง 12 แฟ้ม สปสช.จะมีการปรับโครงสร้างใหม่ ภายใน เดือนธันวาคม

209
เราต้องทำอะไรเพื่อให้ได้ point มากที่สุด 555555

210
เนื่องจาก ไม่สามารถ พิมพ์ตัวอักษรได้ในตาราง person_house_position ดังรูป
person_house_position_id ใส่ได้เฉพาระตัวเลข

211
เห็นว่าจะออกวันนี้จะได้ทดสอบและบอกให้ จังหวัดกาญจนบุรีได้ใช้
เพราะตอนนี้ให้ใช้ v.3.51.10.29b

212
คลังกระทู้เก่า / เลื่อนอีกแล้ว สปสช
« เมื่อ: ธันวาคม 18, 2008, 12:24:52 PM »
ความไม่พร้อมของ สปสช

213
ให้ใช้ตัว EXE ของ hosxp ที่ต่ำกว่า v.3.51.8.xxx
เพราะข้อมูลที่ส่งขึ้นไปเป็นชำระเงิน
พอดีข้อมูลผมถูกตรวจก่อน สสจ.ให้ฝากมาบอก 555555

214
ไม่สามารถ download protgresql ช่วยด้วยคับ
พอดีผมจะลอง เปลี่ยนการใช้จาก mysql เป็น protgresql

215
HOSxP PCU / คปสอ.ท่าม่วง รายงานออกได้แล้ว
« เมื่อ: ธันวาคม 11, 2008, 09:09:29 AM »
มีที่เสร็จแล้ว และดีใจด้วยนะคับที่รายงานออกได้แล้ว
1.สอ.สระเศรษฐี
2.สอ.รางสาลี่
3.สอ.เขาดิน

216
นอกเรื่อง / ปัญหา ECLAIM2008 กับฐาน MYSQL
« เมื่อ: ธันวาคม 09, 2008, 11:26:01 AM »
ผมกำลังทดสอบการใช้ ECLAIM2008 v 19.2 กับฐาน MYSQL 5.1.30 innodb
ใช้ได้แต่ค่าเริ่มต้นที่คีย์ยังมีปัญหา เช่น รหัส รพ.
แต่ใช้กับ ACCESS ไม่มีปัญหา

217
อบรมมา 1 สัปดาห์ รายงานไม่ออก สักตัว
ผมเลยต้องทำการแก้ไขเอง
และดีใจด้วยกับความเข้าใจ

218
นอกเรื่อง / ฝากให้ กอล์ฟ เจ็ดเสมียน
« เมื่อ: ธันวาคม 02, 2008, 11:57:17 AM »
select v.hn,concat(p.pname,p.fname," ", p.lname) as patient_name,v.pdx,v.dx0,v.dx1,v.dx2,v.dx3,v.dx4,v.dx5
from vn_stat v
left outer join patient p on p.hn= v.hn
left outer join opdscreen s on s.vn= v.vn
where v.vstdate between "2007-10-01" and "2008-09-30"
and ( (v.pdx >= "I100" and v.pdx <= "I159")
or (v.dx0 >= "I100" and v.dx0 <= "I159")
or (v.dx1 >= "I100" and v.dx1 <= "I159")
or (v.dx2 >= "I100" and v.dx2 <= "I159")
or (v.dx3 >= "I100" and v.dx3 <= "I159")
or (v.dx4 >= "I100" and v.dx4 <= "I159")
or (v.dx5 >= "I100" and v.dx5 <= "I159"))
and (v.pdx in ("I64")
or v.dx0 in ("I64")
or v.dx1 in ("I64")
or v.dx2 in ("I64")
or v.dx3 in ("I64")
or v.dx4 in ("I64")
or v.dx5 in ("I64"))

219
นอกเรื่อง / ฝากให้ คปสอ.หนองปรือครับ
« เมื่อ: พฤศจิกายน 25, 2008, 08:51:05 AM »
delete from baby_items
แล้ว select * from baby_items
แล้ว OPEN ตาราง baby_items.CDS
แล้ว APPEND
แล้ว 11 รง 5 หน้า 2 จะใช้งานได้ครับ
ขอขอบคุณที่ให้กำลังใจผม แล้วไว้ใจผม
และผมจะทำให้ทุกคนมีความสุขในการใช้ HOSXP_PCU ครับ

220
มีของใครออกมาหลายคนบางครับ
มีวิธีที่จะให้มีข้อมูลใขตาราง AER อย่างไรครับ อ.ชัยพร

222
แจ้งข้อผิดพลาดการทำงานของ HOSxP V3 / BUG 3.51.10.29
« เมื่อ: ตุลาคม 31, 2008, 17:45:03 PM »
ผมใช้ 3.51.10.29b server cpu ไม่ทำงานหนักเหมือน
3.51.10.10-cpu 100%x2 และ
3.51.10.26-cpu 100%x1   
bus ยังเหมือน BUG 3.51.10.26 แต่ดีที่ server cpu ทำงานน้อยลงมากๆ ครับ
ใครใช้ 3.51.10.10-3.51.10.26 ขอบอกว่าช้าสุดๆตอนแรกนึกว่า
เป็นที่ my.cnf ก็ไม่ใช้ เป็นที่ใช้ mysql 5.1.29 ก็ไม่ใช้
อัพเป็น 3.51.10.29b ก็หายดีใจครับ
ทำงานได้สักที

223
นอกเรื่อง / โปรแกรม e-Claim 2008 (version 1.0.0.17)
« เมื่อ: ตุลาคม 22, 2008, 21:35:36 PM »
กำลังจะออกอีก 2-3 วัน
พร้อม โครงสร้าง 12 + AER+ADR เป็น 14 แฟ้ม สำหรับ รพ.ที่จะนำเข้า โดยไม่ต้องคีย์
รอจาก http://eclaim.nhso.go.th/webComponent/download/DownloadAction.do

224
ทดสอบบ่ายครับ


ALTER TABLE person_anc_lab  ADD `lab_result_normal` char(1) NULL   
ALTER TABLE opduser  ADD `restrict_clinic_access` char(1) NULL   
ALTER TABLE kskdepartment  ADD `print_sticker_check` char(1) NULL

225
ดีใจจังที่จะใช้ทั้งจังหวัดกาญจนบุรี

226
นอกเรื่อง / ความรู้การทำ raid
« เมื่อ: กันยายน 19, 2008, 16:15:08 PM »
RAID ที่นิยมกันก็มี 0 , 1 , 5 , 0+1 , 1+0 เท่านั้นเอง บางคนอาจสงสัยว่า มีด้วยเหรอ RAID 1+0 อ่านต่อกันนะครับ

คำอธิบาย Logic Drive หมายถึง Drive ที่สร้างขึ้นมาจาก RAID นะครับ

RAID 0
RAID 0 เป็นแบบที่ง่ายและเป็นพื้นฐานที่สุดเลย คือ ทำการรวม HDD 2 ตัว (หรือมากกว่า) ให้กลายเป็น HDD ตัวเดียวกัน (เรียกว่า Logic Drive) เช่น ถ้ามี HDD 40G 2 ตัว ตัวแรกจะเป็น C อีกตัวก็จะเป็น D เมื่อเราแปลงเป็น RAID 0 เนื้อที่ของทั้ง 2 ตัวก็จะรวมกันเป็น Drive เดียวกัน ชื่อ C มีขนาด 80G โดยเมื่อแปลงเป็น RAID 0 แล้ว OS และโปรแกรมต่างๆ ก็จะมอง Drive ใหม่นี่ เสมือนเป็น Drive เดีวยวกันที่สามารถอ่านเขียนข้อมูลต่างๆ ได้ตามปกติ
ข้อดี คือ ทำให้การอ่านหรือเขียนข้อมูลเร็วขึ้นมาก เพราะมีหัวอ่าน/เขียนข้อมูลเพิ่มมากขึ้น (ในระบบ SCSI นะครับ ถ้า IDE หัวอ่านเพิ่มขึ้น ก็ไม่เร็วขึ้นหรอก ไปอ่านที่ อันแรกก็ได้ครับ) และมันยังขยายเนื้อที่สำหรับเก็บข้อมูลได้ง่ายขึ้นด้วย
ข้อเสีย เนื่องจากมันไม่ได้ทำการสำรองข้อมูลเลย หรือแม้แต่ Parity Bit มันก็ไม่ได้ทำ (แม้แต่นิดเดียว) ถ้า HDD ตัวไหนเสีย มันจะทำให้ Logic Drive ที่เราสร้างขึ้น เสียไปทั้งหมด ข้อมูลของเราก็จะหมดไปด้วย (เศร้า)

RAID 1
RAID 1 ต่างจาก RAID 0 แบบว่า หน้ามือเป็นหลังมือเลย เนื่องจาก RAID 1 จะเก็บข้อมูลทั้งหมดลง HDD ตัวแรก เหมือนการใช้งานทั่วๆ ไป แต่จะมี HDD ตัวที่สองเพิ่มเข้ามา เราเรียก HDD ตัวนี้ว่า MIRRORING หรือ DUPLEXED โดยที่ HDD ตัวทั่สองนี้ จะทำการสำรองข้อมูลจากตัวแรก เพื่อป้องกันการสูญหายของข้อมูล โดยมีข้อกำหนดว่า HDD ทั้ง 2 ตัว ต้องขนาดเท่ากันพอดี ถ้าเป็นไปได้ ควรจะเป็นยี่ห้อ และรุ่นเดียวกันด้วย
ข้อดี อย่างที่เห็นล่ะครับ ข้อมูลจะถูกสำรองไว้ตลอดเวลา ไม่ต้องกลัวว่าจะหายเลย ถ้า HDD ตัวไหนเสีย อีกตัวก็จะขึ้นมาทำงานแทนทันที ถ้าเป็น Server ที่มีระบบ Hot Swap เราสามารถถอด HDD ตัวที่เสีย ไปเปลี่ยน แล้วเอาตัวใหม่มาใส่ได้ทันที โดยไม่ต้องปิดเครื่องเลย เมื่อเราเอา HDD ตัวใหม่มาใส่ ระบบก็จะทำการสำรองข้อมูลไปที่ HDD ตัวใหม่เอง โดยอัตโนมัติ และข้อดีอีกอย่างคือ มันสามารถเลือกที่จะอ่านข้อมูลจาก HDD ตัวไหนก็ได้ ทำให้มันอ่านข้อมูลได้เร็วขึ้น
ข้อเสีย เนื่องจากมันต้องเขียนข้อมูลลง HDD ถึง 2 ตัวต่อข้อมูล 1 ชุด ทำให้ภาระในการเรียนข้อมูลมีมากขึ้นเป็น 2 เท่าเลย ทำให้เวลาในการเขียนข้อมูลมากกว่าปกติ และระบบนี้ใช้เงินเยอะพอสมควร เพราะต้องใช้ HDD 2 ชุด ต่อข้อมูล 1 ชุด

RAID 0 + 1
RAID 0+1 คือการนำข้อดีของ RAID 0 และ RAID 1 มารวมกัน ทำให้มีการรวมเนื้อที่จาก HDD หลายๆ ตัวเข้าด้วยกัน ละมีการทำสำเนาไปพร้อมกันด้วย โดยต้องนำ HDD มาแปลงเป็น RAID 0 จำนวน 2 ชุดก่อน ทำให้ได้ Logic Drive ที่มีเนื้อที่ของ HDD มารวมกัน แล้วจึงสร้าง RAID 1 ขึ้นมาอีกทีจาก Logic Drive ทั้ง 2 ชุด
ข้อเสีย เปลือง HDD อย่างมาก และถ้า HDD ตัวไหนเสียไป อาจทำให้ Logic Drive เสีย และเจ้งทั้งระบบ

RAID 1 + 0
RAID 1+0 มีการทำงานเหมือนกับ RAID 0+1 เพียงแต่จะเริ่มสร้าง RAID 1 มาก่อน 2 ชุด เพื่อทำการสำรองข้อมูลกันก่อน แล้วค่อยสร้าง RAID 0 ขึ้นมาอีกที เพื่อรวมข้อมูลทั้งหมดเข้าด้วยกัน วิธีนี้เป็นที่นิยมมากกว่า RAID 0+1 อีกนะ (ผมก็ใช้ตัวนี้)
ข้อดี ถ้า HDD ตัวไหนเสีย จะไม่ทำให้ Logic Drive เสียไปด้วย
ข้อเสีย เปลือง HDD มากกว่า RAID 0+1 อีก ;-(

RAID 5
RAID 5 ได้นำข้อดีของ RAID แบบต่างๆ มารวมไว้ในตัวเอง คือ ราคา ประสิทธิภาพ และความสามารถในการป้องกันข้อมูลสูญหาย เพราะ RAID แบบต่างๆ จะมีข้อดีไม่ครบทั้งหมด คืออย่างมากก็ได้แค่ 2 ใน 3 อย่าง RAID 1+0 ประสิทธิภาพดี ป้องกันข้อมูลได้ แต่แพงโคตร RAID 5 ต้องการ HDD 3 ตัวในการทำงาน โดยนำเนื้อที่ของ HDD แต่ละตัวมาเก็บรวมกันเป็น 1 Logic Drive เหมือนการทำงานของ RAID 0 แล้วสร้าง Parity Bit เพื่อใช้กู้ข้อมูลของแต่ละ Drive ขึ้นมาโดยแยกออกไปเขียนใน Drive อื่นๆ เช่น Parity Bit ของ HddA จะนำไปไว้ที่ HddC ของ HddC ก็จะนำไปไว้ที่ HddB ส่วนของ HddB ก็จะนำไปไว้ที่ HddA วนกันไป 555
ข้อดี ข้อมูลไม่หายแน่นอน เพราะมีการเก็บ Parity ไว้ใน HDD แต่ละตัว แล้วความเร็วในการอ่านข้อมูล ก็เยอะมากๆ ด้วย เนื่องจากมี HDD ถึง 3 ตัวนี่
ข้อเสีย เขียนข้อมูลได้ช้ามากๆ เนื่องจากต้องเขียนข้อมูลแล้ว ยังต้องไปเขีนยน Parity อีก แล้วยังต้องใช้ HDD ถึง 3 ตัว ซึ่งเปลืองมาก (แต่ก็น้อยกว่า RAID 1+0) และอัตราความเร็วในการเขียนข้อมูลก็ช้ามากๆ

227
แจ้งข้อผิดพลาดการทำงานของ HOSxP V3 / hosxp v.3.51.9.9b
« เมื่อ: กันยายน 09, 2008, 16:41:04 PM »
hosxp v.3.51.9.9b

228
นอกเรื่อง / ยินดีตอนรับ รพ.สิเกา มาดูงาน
« เมื่อ: กันยายน 05, 2008, 15:09:10 PM »
ยินดีตอนรับ รพ.สิเกา มาดูงาน เพราะผมเคยฝึกงาน เมื่อ 7 ปี

229
นอกเรื่อง / อยากให้มี dw สามารถส่งได้ 3 ที่
« เมื่อ: กันยายน 05, 2008, 10:36:38 AM »
พอดีที่ จังหวัดมี dw 2 ที่แล้วครับ อยาก อ.ชัยพร ช่วยแก้ให้หน่อยครับ

230
step ที่ 1
#yum install ntp

step 2
# crontab -e

step 3
# vi /etc/ntp.conf
สำหรับบันทัดนี้ มันจะเป็นแหล่งที่เรา ไป sync กับตัว หลัก
server clock.nectec.or.th prefer
บันทัดนี้ สำหรับ server รอง
server 202.142.213.175
อนุญาติให้ ทุกๆ client ติดต่อสั่ง ntpdate ได้
restrict 0.0.0.0 mask 0.0.0.0 nomodify

step 4
# chkconfig ntpd on
# vi /etc/sysconfig/ntpd
SYNC_HWCLOCK=yes
(write the sync time to CMOS)

Final
# pgrep ntpd
(checking the ntpd process ID)
# netstat -ntlup
(checking the sync status)
# ntpq -p
(checking the port’s status)
configure the firewall rule, make sure the UDP:123 is accept.
#service ntpd start
(start the ntp server)
Client may get the ntpserver time after 5~10 min.


time1.nimt.or.th
time2.nimt.or.th
time3.nimt.or.th
time.navy.mi.th
clock.nectec.or.th

231
การส่ง 18 แฟ้ม เป็นการส่งนอกเหนือจาก 12 + pp

232
แจ้งข้อผิดพลาดการทำงานของ HOSxP V3 / hosxp v.3.51.8.23
« เมื่อ: สิงหาคม 24, 2008, 08:34:42 AM »
hosxp v.3.51.8.23 มี bus อะไรบ้าง

233
ตอบทุกคำถามที่รู้
และจะช่วยทุกคนที่ส่งข้อมูลแล้วนำเข้าไม่ได้
แต่กรุณาส่งหน้า web ที่ สปสช.บอกว่านำเข้าไม่ได้ มาด้วย

235
เปลี่ยนอีกแล้วครับ

236
อบรม 27-29 มิย.2551 โดย อ.นาจ

237
service ขาด cid
surveil ขาด cid
drug ขาด cid
procedขาด cid
epi ขาด cid
woman ขาด cid
fp ขาด cid
nutri ขาด cid
anc ขาด cid
pp ขาด cid
ของเดือน พ.ค.51 ตอนนี้ สปสช.ต้องการ ตารางที่มากขึ้นตลอด
อยากให้อาจารย์ช่วยทำต้วส่งออกที่ ส่งออกทั้งที่ข้อมูลเป็น y และ y/n และ ที่ว่าง
เพราะ สปสช.มีการเปลี่ยนแปลงตลอด ผู้ใช้จะได้ไม่ต้องมากังวล เรื่องส่งข้อมูล ซึ่งถ้ามีการทำไว้แล้ว
ใช้หน้าเชิงรุกส่งออก

238
MySQL / my.cnf 4 G. โรงพยาบาลด่านมะขามเตี้ย
« เมื่อ: มิถุนายน 05, 2008, 09:05:06 AM »
ได้จาก รพ.มะการักษ์และแก้ไขบางส่วน

239
ตัวนำเข้า Surveillance จากตัว excel  และวิธีนำเข้า

240
มีข้อมูลอยู่แต่ดึงไม่ได้ ตารางที่ สปสช.ต้องการเพิ่ม fptype เพราะเริ่มมีใน 12+pp และเป็น Y

241
MySQL / มีใครลองใช้ mysql v.6.0.4 แล้วบ้างครับ
« เมื่อ: เมษายน 27, 2008, 10:20:12 AM »
ที่ดาวโหลด
ftp://mirror.switch.ch/mirror/mysql/Downloads/MySQL-6.0/
ใครใช้แล้วช่วยบอกที่ว่าเป็นอย่างไรบ้าง
ขอขอบคุณที่ตอบคำถาม

242
ในภาพที่ส่งมา เซตเหมือน HOSXP แล้ว EORROR

243
System Message
SQL Error: Specified key was too long; max key length is 1000 bytes
SQL Error: Table 'hos.hosxp_ddl_index' doesn't exist

หน้า: 1 ... 3 4 [5]