วันศุกร์ที่ 21 ธันวาคม พ.ศ. 2555

fiber optic

เรื่องของสายใยแก้ว (FIBER OPTIC CABLE) เป็นเรื่องใหม่และไกลตัว ผมยังจำได้ในการติดตั้งสายใยแก้วครั้งแรก ณ สถาบันการศึกษาแห่งหนึ่ง ซึ่งเป็นแห่งแรกของประเทศไทยที่นำสายใยแก้วมาทดลองเดินสายเป็นสายเชื่อมหลัก (Back Bone) ปรากฎว่าค่อนข้างตื่นเต้นโดยเฉพาะตอนที่เข้าหัวสาย FIBER ปรากฎว่ามีนักศึกษาร่วม 50 คนมามุงดูพร้อมทั้งถ่ายทำวี.ดี.โอ. ซึ่งทราบต่อมาว่าเพื่อนำไปฉายให้นักศึกษาในห้องเรียนได้มีโอกาสสัมผัส
มาถึงปัจจุบันนี้...เรื่องของสายใยแก้ว (ผมขอเรียกว่าสายไฟเบอร์ดีกว่าดูไฮเทคดี) เป็นเรื่องใกล้ตัวของพวกเราที่อยู่ในยุคเทคโนโลยีสารสนเทศหรือ IT แล้ว แต่ปรากฎว่ายังมีคนจำนวนมากที่ยังไม่รู้จักสายไฟเบอร์หรืออาจรู้จักอย่าง ผิวเผินเต็มที ดังนี้ผมขอขันอาสานำเรื่องยาก ๆ ของสายไฟเบอร์มาเขียนอธิบายง่าย ๆ เพื่อให้คนทั่วไปได้รู้จักและเข้าใจเพิ่มขึ้นดังนี้
สายไฟเบอร์เป็นสายที่นำหลอดแก้วมาหุ้มฉนวนเพื่อใช้ เป็นตัวนำสัญญาณแสง โดยทำขึ้นจากหลอดแก้วซึ่งเป็นหัวใจหลักของสาย เราลองหลับตานึกดูว่า หลอดแก้วที่นำมาเป่าเป็นเส้นใส ๆ จะนำสัญญาณแสงจากจุดหนึ่งไปยังอีกจุดหนึ่งได้อย่างไร เราลองฉายไฟฉายเข้าไปในหลอดแก้วใส ๆ จะพบว่าแสงทะลุด้านข้างหลอดแก้วไปหมด ดังนั้นเทคโนโลยีของสายไฟเบอร์อย่างหนึ่งก็คือการนำสารมาฉาบรอบนอกของหลอด แก้วเพื่อไม่ให้แสงทะลุผ่านหลอดแก้วไป
ดังนั้นการแบ่งประเภทหลัก ๆ ของสายไฟเบอร์จึงแบ่งตามขนาดของเส้นผ่าศูนย์กลางของแก้วดังนี้
1. ขนาด 8.3/125 ?m หมายถึงแก้วมีเส้นผ่าศูนย์กลาง 8.3 ไมโครเมตรและเคลือบผิวแก้วจนมีเส้นผ่าศูนย์กลาง 125 ไมโครเมตร
2. ขนาด 50/125 ?m หมายถึงแก้วมีเส้นผ่าศูนย์กลาง 50 ไมโครเมตรและเคลือบผิวแก้วจนมีเส้นผ่าศูนย์กลาง 125 ไมโครเมตร
3. ขนาด 62.5/125 ?m หมายถึงแก้วมีเส้นผ่าศูนย์กลาง 62.5 ไมโครเมตรและเคลือบผิวแก้วจนมีเส้นผ่าศูนย์กลาง 125 ไมโครเมตร
หลายคนอาจหาว่าผมโกหก เมื่อเส้นแก้วเคลือบสารกันสะท้อนจะนำมาเดินเป็นสายได้อย่างไร ใจเย็น ๆ ครับ ผมกำลังจะอธิบายต่อว่า เมื่อได้เคลือบสารกันสะท้อนแล้วยังไม่สามารถใช้งานได้ เราจำเป็นต้องเคลือบฉนวน (JACKET) อีกชั้นหนึ่งเพื่อให้เกิดความยืดหยุ่นในการใช้งานและสามารถดัดโค้งได้บาง ส่วน ซึ่งการเคลือบฉนวนขั้นตอนนี้เราจะใส่สีเข้าไปด้วยเพื่อแยกแยะว่าเส้นไหนเป็น เส้นไหน ขั้นตอนนี้เขาจะเคลือบฉาบจนความหนา 250 ?m
เพื่อไม่ให้ท่านหลุดโลกไปเลย จึงขออนุญาติแนะนำศัพท์ที่ใช้กันแพร่หลายเพื่อที่เวลาไปอ่านหนังสือต่าง ประเทศจะได้เข้าใจว่าหมายถึงอะไรดังนี้
1. CORE แปลทับศัพท์ แปลว่า แก่น ซึ่งก็หมายถึงตัวแท่งแก้วนั่นเอง
2. CLADDING แปลว่า ฉาบติด หมายถึงการฉาบสารกันสะท้อนไปบนแท่งหลอดแก้ว
3. COATING แปลทับศัพท์ว่า การเคลือบ ซึ่งก็คือการเคลือบฉนวนไปบนหลอดแก้วที่ฉาบสารแล้วกลายเป็นเส้นไฟเบอร์
เห็นไหมครับว่าจริง ๆ แล้วเทคโนโลยีสายไฟเบอร์ไม่มีอะไรพิเศษพิสดารเลย เพียงแต่เรามาเรียกชื่อภาษาอังกฤษกันจนคนไทยสับสนคิดว่าไฮเทค เช่นเรียกสายไฟเบอร์ด้วยขนาดเป็น 62.5/125 ซึ่งบางทีพอเราไม่รู้ที่มาที่ไปก็เลยงง ๆ พอถามก็เจอคำอธิบายอีกว่า 62.5 คือขนาดเส้นผ่าศูนย์กลางของ CORE และ 125 คือขนาดเส้นผ่าศูนย์กลางของ CLADDING เลยจบก่อนที่จะเข้าใจ กลายเป็นว่าเป็นอะไรที่ยากเกินเข้าใจไปแล้ว
เพิ่มเติมอีกนิดหนึ่งเมื่อมีคำถามว่าสายที่บอกว่า ซิงเกิ้ลโหมด (Singlemode) กับมัลติโหมด (Multimode) คืออะไร มันแตกต่างกับสายไฟเบอร์ที่ผมเขียนมาข้างต้นไหม ก็ขออธิบายเพิ่มดังนี้คือ
1. แบบซิงเกิ้ลโหมด (Singlemode) ก็คือสายแบบ 8.3/125 ?m ซึ่งในการส่องแสงจะต้องใช้แสงที่เป็นเส้นตรง เพราะขนาดของแสงเล็กมาก ต้องมีกำลังส่องแสงสูง เส้นลำแสงเดียว ซึ่งได้แก่แสงแบบ LASER จะเห็นได้ว่าซิงเกิ้ลก็แปลว่าหนึ่ง ก็คือวิธีการฉายหรือแบบหนึ่งลำแสง ซึ่งจะต่างไปกับสายที่หลอดเล็กมาก ๆ เพื่อรีดแสงไม่ให้กระจายไปไหน สามารถส่งสัญญาณได้ไกล
2. แบบมัลติโหมด (Multimode) ก็คือสายแบบ 50/125 และ 62.5/125 ?m ซึ่งการส่องแสงผ่านหลอดแก้วที่มีขนาดใหญ่ สามารถใช้แสงไฟธรรมดาส่องไปได้ แต่เมื่อแสงเข้าไปในหลอดแก้วแล้วจะเป็นแสงกระจายทั่วทิศทาง ทำให้แสงเดินทางได้สั้นกว่าแบบแรก
มีคนแย้งมาว่าถ้าอย่างนั้นแล้วทำไมไม่ใช้แต่สายแบบ Singlemode เมื่อสายขนาดเล็กราคาน่าจะถูกกว่าและนำแสงได้ไกลกว่า ก็ถูกต้องครับสาย Singlemode ราคาถูกกว่า นำสัญญาณได้ไกลกว่าแต่ข้อเสียก็คือตัวกำเนิดแสงราคาแพงกว่ามากเพราะต้อง สร้างลำแสงเป็นลำแสงเดียวแบบแสง LASER ซึ่งเมื่อเทียบกับ Multimode ที่ใช้แสงไฟธรรมดาหรือแสงแบบไฟฉายได้
ในการนำสายไปติดตั้งใช้งาน เพื่อความสะดวกและยืดอายุการใช้งานสายไฟเบอร์ จึงมีการสร้างโครงสร้างเพิ่มให้สายเหมาะสมกับการใช้งาน โดยหลัก ๆ มีอยู่ 2 แบบโครงสร้างดังนี้
1. แบบ Tight Buffer ซึ่งนิยมทำให้กับสายที่เดินภายในอาคาร โดยจะมีการหุ้มฉนวนอีกชั้นหนึ่งให้มีความหนา 900 ?m (0.9 mm) เพื่อสะดวกในการใช้งานและการป้องกันสายไฟเบอร์ในการติดตั้ง
2. แบบ Loose Tube นิยมใช้กับสายที่ออกแบบให้เดินนอกอาคาร โดยการนำสายไฟเบอร์มาลอยไว้ในแท่งพลาสติกและใส่เยลกันน้ำเข้าไปในหลอดเพื่อ ป้องกันสายไม่สัมผัสกับแรงต่าง ๆ อีกทั้งยังกันน้ำซึมเข้าไปอีกด้วย
สุดท้ายการนำสายไปใช้งานจริงจำเป็นต้องหุ้มฉนวนอีก ชั้นเพื่อป้องกันการกระแทกและใส่เส้นใยเหนียวหุ้มสายเพื่อใช้ในการดึงสาย ระหว่างติดตั้งโดยศัพท์ทางเทคนิคจะเรียกการหุ้มฉนวนชั้นสุดท้ายว่า Jacket ซึ่งอาจเพิ่มเติมเหล็กหุ้มเพื่อกันสัตว์แทะหรือกัด ซึ่งก็เรียกว่าเกราะเหล็ก หรือ Steel Armored หรือบางโรงงานไม่ใช้เส้นใยเหนียวในการดึงสาย ก็ใช้วิธีใส่ลวดเป็นเส้นคู้กับสายไป ซึ่งจะดีในแง่ประหยัดแต่สายจะแข็งมากโค้งยาก บางยี่ห้ออาจใช้
Thermoplastic เป็นฉนวนทำให้สามารถใช้ได้ทั้งภายในและภายนอกอาคารเพื่อกันไฟลามและทนต่อ สภาพแวดล้อมทั้งนี้รูปแบบภายนอกจะแตกต่างกันไปตามโรงงานผู้ผลิต แต่สายจะดีไม่ดีอยู่ที่คุณสมบัติของแท่งแก้วที่เป็นแกนในของสายไฟเบอร์ครับ
หากต้องการทราบรายละเอียดจริง ๆ เกี่ยวกับสายไฟเบอร์ และการนำสายไฟเบอร์ไปใช้งาน ขอให้ติดต่อทีมวิศกรของ บริษัท อินเตอร์ลิ้งค์ คอมมิวนิเคชั่น (ประเทศไทย) จำกัด เลขที่ 48/28 อาคารอินเตอร์ (1987) ซอยรุ่งเรือง ถนนรัชดาภิเษก แขวงสามเสนนอก เขตห้วยขวาง กรุงเทพฯ 10310 และหากสนใจจะขอจองที่นั่งอบรมเทคนิคการออกแบบ Open Cabling System ได้ที่แผนกการตลาดตลอดเวลาทำการได้ที่หมายเลขโทรศัพท์ 693-1222 (20 คู่สาย) โทรสาร 693-1399

วันอาทิตย์ที่ 25 พฤศจิกายน พ.ศ. 2555

LUN คือ

A logical unit number (LUN) is a unique identifier used to designate individual or collections of hard disk devices for address by a protocol associated with a SCSI, iSCSI, Fibre Channel (FC) or similar interface. LUNs are central to the management of block storage arrays shared over a storage area network (SAN).

The term LUN dates back to the early days of SCSI when each device was identified by a logical number, up to eight in those days. Now servers with a dozen or more LUNs are common and it's getting less common for them to be connected to a conventional internal SCSI disk array. However, the basic element of storage for the server is still referred to as the LUN.

Each LUN identifies a specific logical unit, which may be a part of a hard disk drive, an entire hard disk or several hard disks in a storage device. So a LUN could reference an entireRAID set, a single disk or partition, or multiple hard disks or partitions. In any case, the logical unit is treated as if it is a single device and is identified by the LUN.

Here's how LUNs work with SCSI:
A SCSI (Small System Computer Interface) is a parallel interface that can have up to eight devices all attached through a single cable; the cable and the host (computer) adapter make up the SCSI bus. The bus allows the interchange of information between devices independently of the host. In the SCSI program, each device is assigned a unique number, which is either a number between 0 and 7 for an 8-bit (narrow) bus, or between 8 and 16 for a 16-bit (wide) bus. The devices that request input/output (I/O) operations are initiators and the devices that perform these operations are targets. Each target has the capacity to connect up to eight additional devices through its own controller; these devices are the logical units, each of which is assigned a unique number for identification to the SCSI controller for command processing.

In LUN zoning, SAN fabric is configured to match LUNs to the proper servers. As a rule, end devices such as hosts can only see and access storage within their zone. Limiting access in this way improves security and allows bandwidth allocation through assigning particular ports to a zone.

LUN masking is a further constraint added to zoning, subdividing access to the port so that only LUNs authorized to access a specific server can access the corresponding port. Then, even if several LUNs are accessed through the same port, the server masks can be set to limit each server's access to the appropriate LUNs. LUN masking is typically conducted at the host bus adapter (HBA) or switch level.



Note: The logical unit described above is different from the logical unit of IBM's Systems Network Architecture (SNA).

ความสามารถครั้งใหญ่ของ Virtual Machine File System 5 (VMFS-5)

ความสามารถครั้งใหญ่ของ Virtual Machine File System 5 (VMFS-5) การปรับเปลี่ยนเวอร์ชั่นใหม่ของโครงสร้างเวอร์ชวลไลเซชั่นระดับโลกอย่าง VMware vSphere ขึ้นมาเป็นเวอร์ชั่น 5 ย่อมทำให้องค์ประกอบหลายส่วนภายในถูกขยับตามไปอย่างอหังการ์ หนึ่งในนั้นคือระบบไฟล์อันมีนามว่า Virtual Machine File System (VMFS) ถูกเปลี่ยนจากเวอร์ชั่น 3.46 มาเป็น 5 อย่างเลี่ยงไม่ได้ และนี่คือความสามารถครั้งใหม่และใหญ่ของ VMFS-5 ศักยภาพใหญ่ๆ บล็อกขนาด 1 เมกกะไบต์ถ้วนทั่วกัน (Unified 1MB Block Size) – บน VMFS-3 ขนาดของบล็อกมีหลากหลายตั้งแต่ 1, 2, 4 และ 8 เมกกะไบต์ (MB) เวลาเราสร้างดาต้าสโตร์ (Datastore) จำเป็นต้องระบุขนาดให้เหมาะสม เพื่อให้เราสามารถสร้างไฟล์ขนาดใหญ่ได้ตามความต้องการ แต่บน VMFS-5 ขนาดของบล็อคจะยืนอยู่ที่ 1 เมกกะไบต์ตลอดศก ไม่มีให้เลือกอีกแล้ว ลดความวุ่นวายไปได้อยู่โข ขนาดวอลลุ่มใหม่ใหญ่อหังการ์ (Large Single Extent Volumes) – ในเวอร์ชั่นเก่าวอลลุ่มที่รองรับใหญ่สุดเพียงแค่ 2 เทราไบต์ (TB) มาคราวนี้มีให้เราได้เล่นเลยเถิดกันไปถึง ~60 เทราไบต์…. อะไรจะไขนนาด ขนาดบล็อคย่อยลดลงไป (Small Sub-Block) – เดิมทีเราใช้บล็อคย่อยมีขนาด 64 กิโลไบต์ (64KB) มาคราวนี้วีเอ็มแวร์ลดลงให้เล็กสุดใจเหลือแค่ 8 กิโลไบต์ (8KB) เท่านั้น นั่นทำให้ไฟล์ขนาดเล็กกว่า 8 กิโลไบต์ (แต่ใหญ่กว่า 1 กิโลไบต์) จะไม่ต้องใช้พื้นที่ขนาด 64 กิโลไบต์ในการจัดเก็บ ทำให้ได้พื้นที่คืนมามากอยู่ รองรับไฟล์เล็กๆ ได้ดีขึ้น (Small File Support) – บน VMFS-5 สำหรับไฟล์ขนาดเล็กกว่า 1 กิโลไบต์ จะไม่ได้เก็บอยู่ในบล็อคย่อยขนาด 8 กิโลไบต์เพียงไฟล์เดียว มันเปลืองเกินไป ระบบจะทำการจัดเก็บไฟล์ย่อยๆ ขนาด 1 กิโลไบต์ไว้รวมๆ กันในบล็อคย่อย แล้วเก็บตำแหน่งของไฟล์ไว้ใน metadata สำหรับเรียกหาไฟล์เมื่อต้องการ และเมื่อไฟล์บางไฟล์เริ่มโตขึ้นจนมีขนาดใหญ่โตเกินกว่า 1 กิโลไบต์ มันก็จะถูกแยกออกไปอยู่ในบล็อคย่อยขนาด 8 กิโลไบต์ของมันเองเป็นเอกเทศ จำนวนไฟล์ก็มากขึ้น (Increased File Count) – บน VMFS-5 รองรับจำนวนไฟล์ได้มากกว่า 100,000 ไฟล์ เพิ่มขึ้นมากกว่า 3 เท่าตัว จากที่ VMFS-3 รับได้ที่ประมาณ 30,000 ไฟล์ต่อดาต้าสโตร์เท่านั้น เพิ่มเติมการทำงานของ Atomic Test & Set (ATS Enhancement) – Atomic Test & Set (ATS) เป็นคุณสมบัติในการจัดการไฟล์บน VMFS ที่ได้ถูกเพิ่มเติมเข้ามาใหม่บนความสามารถ vSphere Storage APIs for Array Integration (VAAI) เมื่อตอน vSphere 4.1 มาคราวนี้มันมาแบบจัดเต็ม ความสามารถ ATS จะอยู่บนทุกอณูของ VMFS-5 ทำให้ประสิทธิภาพในการล็อค (Lock) ก่อนจะทำการเขียนข้อมูลทำได้หรูยิ่งขึ้น การอัพเกรดจาก VMFS-3 ไปเป็น VMFS-5 ทำได้โดยไม่มีดาวน์ไทม์ (Downtime) นั่นหมายความว่าเวอร์ชวลแมชชีน (Virtual Machine) ทำงานต่อไปได้แม้เราจะทำอัพเกรดดาต้าสโตร์อยู่ เมื่ออัพเกรดแล้ว ไฟล์เล็กๆ ที่มีขนาดเล็กกว่า 1 กิโลไบต์ก็จะไปอยู่รวมกันเป็นที่เป็นทางในบล็อคย่อยๆ เพื่อไม่ให้เปลืองพื้นที่ เมื่ออัพเกรดแล้ววอลลุ่มก็จะสามารถใหญ่ได้สุดๆ ~60 เทราไบต์ และแน่นอนจะได้ความสามารถ ATS เข้าสู่วอลลุ่มหรือดาต้าสโตร์นั้นโดยพลัน ความแตกต่างระหว่างสร้าง VMFS-5 ขึ้นมาใหม่ กับการอัพเกรดจาก VMFS-3 เมื่ออัพเกรดมา ขนาดบล็อคจะเป็นขนาดเดิมที่เคยเป็น ไม่ได้ปรับมาเป็นขนาด 1 เมกกะไบต์ให้ เมื่ออัพเกรดมา ขนาดบล็อคย่อยจะเป็น 64 กิโลไบต์ ไม่ใช่ขนาด 8 กิโลไบต์ตามโครงสร้างใหม่ เมื่ออัพเกรดมา จำนวนไฟล์ที่รองรับจะเป็น 30,720 ไฟล์เหมือนเดิม ไม่ได้เพิ่มขึ้น เมื่ออัพเกรดมา รูปแบบพาร์ทิชั่น (Partition) จะเป็น Master Boot Record (MBR) สำหรับวอลลุ่มที่ไม่เกิน 2 เทราไบต์ เมื่อมันเกิน พาร์ทิชั่นจะเปลี่ยนเป็นแบบ GUID Partition Table (GPT) ให้อัตโนมัติ โดยที่เวอร์ชวลแมชชีนยังคงทำงานได้ไม่มีผลกระทบ เมื่ออัพเกรดมา พาร์ทิชั่นจะเริ่มทำงานที่เซคเตอร์ (Sector) 128 แต่หากสร้างเป็น VMFS-5 ขึ้นมาใหม่ การทำงานจะเริ่มที่เซคเตอร์ 2048 นะครับ ดิสก์แบบต่อตรง (Raw Device Mapping – RDM) RDM แบบ Passthru (Physical) จะรองรับขนาดได้มหึมา ~60 เทราไบต์ ไม่ว่าจะอัพเกรดมาหรือสร้างใหม่ RDM แบบ Non-Passthru (Virtual) จะคงมีขนาด 2 เทราไบต์ ลบด้วย 512 ไบต์ (2TB-512B) อื่นๆ อีกมากมาย ขนาดไฟล์ VMDK ใหญ่ที่สุดบน VMFS-5 ยังคงได้แค่ 2 เทราไบต์ ลบด้วย 512 ไบต์ (2TB-512B) จำนวนลัน (LUN) รองรับได้สูงสุด 256 ลัน บน ESXi 5.0 คำแนะนำเอย จงสร้างดาต้าสโตร์ VMFS-5 ขึ้นมาใหม่เสียเถิด เพื่อให้รองรับความสามารถใหม่ๆ ให้ได้เป็นอย่างดี นั่นหมายความว่าเราจำต้องนำเอาความสามารถ Storage vMotion เข้ามาช่วย เพื่อย้ายเวอร์ชวลแมชชีนออกไปก่อน แล้วล้างดาต้าสโตร์ VMFS-3 ทิ้งไป ก่อนสร้างใหม่เป็น VMFS-5 แล้วนำเวอร์ชวลแมชชีนกลับคืนรัง ด้วยประการฉะนี้จะทำให้เวอร์ชวลแมชชีนไร้ซึ่งดาวน์ไทม์เอย ที่มา : http://blogs.vmware.com/vsphere/2011/07/new-vsphere-50-storage-features-part-1-vmfs-5.html

วันพฤหัสบดีที่ 22 พฤศจิกายน พ.ศ. 2555

Vm ware 5 Disk Type


There are three options for allocating space out of your storage for your VM disks:
Thick Provisioning Lazy Zeroed: Allocates the disk space statically (no other volumes can take the space), but doesn’t write zeros to the blocks until the first write takes place to that block during runtime (which includes a full disk format).
Thick Provisioning Eager Zeroed: Allocates the disk space statically (no other volumes can take the space), and writes zeros to all the blocks.
Thin Provisioning: Allocates the disk space only when a write occurs to a block, but the total volume size is reported by VMFS to the OS. Other volumes can take the remaining space. This allows you to float space between your servers, and expand your storage when your size monitoring indicates there’s a problem. Note that once a Thin Provisioned block is allocated, it remains on the volume regardless if you’ve deleted data, etc.
By definition, you would expect Thick Provisioning Eager Zeroed to be the fastest.
A quick search turned up both a rudimentary benchmark and a whitepaper that covers disk provisioning in much greater detail and provides a benchmark.
So, of course, the whitepaper proves that Thick Provisioning Eager Zeroed is going to get you the most throughput from an SQL DB or ESE DB. But it might be wise to even use Thin provisioning, then force the DB to grow, if possible scheduling the growth off hours.
The same goes for thin provisioning on a SAN, but that’s another day.

วันจันทร์ที่ 4 มิถุนายน พ.ศ. 2555

แก้ปัญหา DB MSSQL ของ vCenter เต็ม 4 GB


VMware : แก้ปัญหา DB MSSQL ของ vCenter เต็ม 4 GB

อาทิตย์ที่ผ่านมาไป Training ที่ SG กะกว่าจะ Remote มา Test งานที่ Office พอเข้ามาได้ เจอปัญหาว่าไม่สามารถใช้งาน vCenter ไม่ได้ .. -_-” ก็หาดูว่าเกิดปัญหาที่ส่วนไหน ก็เริ่มหาสาเหตุ ?
1. ลองดูที่ Service ของ VMware ก่อน .. มัน Stop นี่น่าาา สั่ง Start สิ .. ฮ่าาา
2. งั้น Connect ใหม่ ดู ก็ไม่สำเร็จ Service เจ้ากรรม ก็ดัน หยุด หายยย ! ซะงั้น …
3.  เอาไงดี .. งั้นไปดูที่ Event Log  ก็พบว่า ..
CREATE DATABASE or ALTER DATABASE failed because the resulting cumulative database size would exceed your licensed limit of 4096 MB per database.
4. เอาไงดีเนี่ย Data Base ของ MSSQL Express มันรองรับ Database สูงสุดที่ 4 GB ..
5. คิดได้ก็จัดการลบไฟล์ Data มันสิ .. แต่ ๆๆๆๆ แล้วลบอันไหนดี เลยค้นหา ใน Google ไปพบว่า Table ที่ใช้งานเยอะจะเป็น Table vpx_event_arg
6. รู้แบบนี้ก็จัดการลบข้อมูลมันซะ เพราะว่ามันแค่เก็บ Event Log เอง .. จัดการด้วยคำสั่ง
use “VIM_VCDB”
truncate table vpx_event_arg;
delete from vpx_event;
7. เย้ ในที่สุดก็ Start Database ได้และ Connect vCenter ได้แล้ว ก็เลยมาจัดการเรื่อง Log ต่อให้มันเก็บน้อย ๆ หน่อย … ถือว่าจบแล้วว …
อัพเดท 2012.03.14
วันนี้เจอลูกค้าที่มีปัญหาแบบเดียวกันนี้ แต่ เมื่อรันคำสั่งด้านบนแล้วไม่สามารถแก้ไขได้ เนื่องจากไฟล์ของ Log มีขนาดใหญ่ขึ้นมาก จึงต้องทำให้เข้าไปค้นใน Google ก็ได้พบวิธีแก้ไข .. โดยมีการทำ 2 ส่วนตามนี้นะครับ ..
1. ก่อนทำ .. ให้ Copy Database ของ vCenter เก็บไว้ก่อน !!!!!! เฝื่อในกรณีที่ทำแล้วติดปัญหาจะได้สามารถนำกลับมาใช้งานได้
2. ดาวน์โหลดไฟล์ VCDB_table_cleanup_MSSQL_V4.X
3. เปิดโปรแกรม Microsoft SQL Server Management Studio Express.
4. สั่ง Clear Database ทำตาม Link นี้ http://www.virtualsmb.net/?p=135 ได้เลยครับ
5. Start Service และ Connect vClient เข้าที vCenter Server
แต่ถ้ายังไม่สามารถใช้งานได้ให้รันคำสั่งนี้อีกครั้ง
alter table VPX_EVENT_ARG drop constraint FK_VPX_EVENT_ARG_REF_EVENT, FK_VPX_EVENT_ARG_REF_ENTITY alter table VPX_ENTITY_LAST_EVENT drop constraint FK_VPX_LAST_EVENT_EVENT
truncate table VPX_TASK
truncate table VPX_ENTITY_LAST_EVENT
truncate table VPX_EVENT
truncate table VPX_EVENT_ARG
alter table VPX_EVENT_ARG add
constraint FK_VPX_EVENT_ARG_REF_EVENT foreign key(EVENT_ID) references VPX_EVENT (EVENT_ID) on delete cascade, constraint FK_VPX_EVENT_ARG_REF_ENTITY foreign key (OBJ_TYPE) references VPX_OBJECT_TYPE (ID)
alter table VPX_ENTITY_LAST_EVENT add
constraint FK_VPX_LAST_EVENT_EVENT foreign key(LAST_EVENT_ID) references VPX_EVENT (EVENT_ID) on delete cascade
ที่ผมลองทำ 2 ส่วนนี้เพิ่มเติมก็จะสามารถลด Database ให้ลดลงได้และสามารถกลับมาใช้งาน vCenter ดีอีกครัง โล่ง !!!!! (คนที่ขอช่วยนะ) …
--------------------------------------------------------------------------------------------------------------------------------

Sql File

/*
VCDB_table_cleanup_MSSQL_V4.X.sql,v 4.0 2010/08/12 


This script will delete data from designated tables in the VirtualCenter DB 
for vc4.x versions.


You are strongly advised to shut down the VirtualCenter server and make
a complete backup of your database before running this script.


VirtualCenter Server must be stopped while this script is running.


Please see USER CONFIGURABLE PARAMETERS section below for options.


In particular, you must set @DELETE_DATA = 1 in order to actually delete rows; 
this is a safety precaution.


Directions: open this file with one of the following and execute:
SQL Query Analyzer (SQL Server 2000) or
SQL Server Management Studio (SQL Server 2005)
SQL Server Management Studio (SQL Server 2008)


Connect using the same DB login that VirtualCenter uses.


The transaction log may fill up during this procedure if sufficient space
is not available.  Monitor the transaction log size and usage with this command:


dbcc sqlperf (logspace)


*/




IF OBJECT_ID('tempdb..#CLEANUP_VCDB') IS NOT NULL
DROP TABLE #CLEANUP_VCDB
GO


SET NOCOUNT ON


DECLARE @VCUSER NVARCHAR(60)
DECLARE @VCUSERID INT
DECLARE @BATCH_SIZE INT
DECLARE @CUTOFF_DATE SMALLDATETIME
DECLARE @CUTOFF_DATE_S NVARCHAR(60)
DECLARE @DELETE_DATA BIT
DECLARE @CNT INT
DECLARE @TOT INT
DECLARE @SQL NVARCHAR(900)
DECLARE @FROM_VAL NVARCHAR(60)
DECLARE @WHERE_VAL NVARCHAR(900)




-- ######### USER CONFIGURABLE PARAMETERS ######################## 
-- 0 = COUNT ONLY; 1 = DELETE ROWS
SET @DELETE_DATA = 0


-- Use one of these methods to specifiy the data cutoff date
SET @CUTOFF_DATE = GETUTCDATE()-180
--SET @CUTOFF_DATE = '2007/01/01'


-- Number of rows to delete per transaction
SET @BATCH_SIZE = 10000


-- ######### END USER CONFIGURABLE PARAMETERS #################### 


-- PERFORM SOME ERROR CHECKING TO ENSURE DB ACCESS
SELECT @VCUSERID = UID FROM SYSOBJECTS
WHERE NAME = 'VPX_VERSION'


IF @@ROWCOUNT < 1
BEGIN
PRINT 'The ' + DB_NAME() + ' database does not appear to contain VirtualCenter tables.'
PRINT 'Please ensure you are connected to the correct database.'
RETURN -- stop execution of this script
END


SELECT @VCUSER = NAME FROM SYSUSERS
WHERE UID = @VCUSERID


PRINT 'VirtualCenter database user: ' + @VCUSER
PRINT 'Logged in user: ' + CURRENT_USER


IF (@VCUSER <> CURRENT_USER) AND (@VCUSER <> 'dbo')
BEGIN
PRINT '***************************************************************'
PRINT 'You do not appear to be logged in as the VirtualCenter DB user.'
PRINT 'Please log in as ''' + @VCUSER + ''' to execute this SQL script.'
PRINT '***************************************************************'
RETURN
END


-- DONE WITH ERROR CHECKING


-- CONVERT THIS DATE TO A STRING WITH QUOTES FOR EFFICIENCY LATER
SET @CUTOFF_DATE_S = '''' + CONVERT(NVARCHAR, @CUTOFF_DATE, 111) + ''''
PRINT 'Cutoff date: ' + @CUTOFF_DATE_S


PRINT 'Batch size: ' + CONVERT(NVARCHAR, @BATCH_SIZE)


PRINT CONVERT(NVARCHAR, getdate(), 120) + ' starting...' 


CREATE TABLE #CLEANUP_VCDB (VPXTABLE NVARCHAR(40), CRITERIA NVARCHAR(250), INITIAL_CNT INT, DELETE_CNT INT)


IF ((SELECT VER_ID FROM VPX_VERSION)< 4) 
BEGIN
INSERT #CLEANUP_VCDB VALUES ('VPX_HIST_STAT', 'SAMPLE_ID IN (SELECT ID FROM VPX_SAMPLE WHERE SAMPLE_TIME < ' + @CUTOFF_DATE_S + ')', 0, 0 )
INSERT #CLEANUP_VCDB VALUES ('VPX_SAMPLE', 'SAMPLE_TIME < ' + @CUTOFF_DATE_S, 0, 0 )
END
ELSE
BEGIN
INSERT #CLEANUP_VCDB VALUES ('VPX_HIST_STAT1', 'TIME_ID IN (SELECT TIME_ID FROM VPX_SAMPLE_TIME1 WHERE SAMPLE_TIME < ' + @CUTOFF_DATE_S + ')', 0, 0 )
INSERT #CLEANUP_VCDB VALUES ('VPX_SAMPLE_TIME1', 'SAMPLE_TIME < ' + @CUTOFF_DATE_S, 0, 0 )
INSERT #CLEANUP_VCDB VALUES ('VPX_HIST_STAT2', 'TIME_ID IN (SELECT TIME_ID FROM VPX_SAMPLE_TIME2 WHERE SAMPLE_TIME < ' + @CUTOFF_DATE_S + ')', 0, 0 )
INSERT #CLEANUP_VCDB VALUES ('VPX_SAMPLE_TIME2', 'SAMPLE_TIME < ' + @CUTOFF_DATE_S, 0, 0 )
INSERT #CLEANUP_VCDB VALUES ('VPX_HIST_STAT3', 'TIME_ID IN (SELECT TIME_ID FROM VPX_SAMPLE_TIME3 WHERE SAMPLE_TIME < ' + @CUTOFF_DATE_S + ')', 0, 0 )
INSERT #CLEANUP_VCDB VALUES ('VPX_SAMPLE_TIME3', 'SAMPLE_TIME < ' + @CUTOFF_DATE_S, 0, 0 )
INSERT #CLEANUP_VCDB VALUES ('VPX_HIST_STAT4', 'TIME_ID IN (SELECT TIME_ID FROM VPX_SAMPLE_TIME4 WHERE SAMPLE_TIME < ' + @CUTOFF_DATE_S + ')', 0, 0 )
INSERT #CLEANUP_VCDB VALUES ('VPX_SAMPLE_TIME4', 'SAMPLE_TIME < ' + @CUTOFF_DATE_S, 0, 0 )
END


DECLARE curse CURSOR FOR
SELECT VPXTABLE, CRITERIA FROM #CLEANUP_VCDB


OPEN curse
FETCH NEXT FROM curse INTO @FROM_VAL, @WHERE_VAL


WHILE (@@FETCH_STATUS = 0)
BEGIN
SET @SQL = 'SELECT @CNT= COUNT(1) FROM ' + @FROM_VAL + ' WHERE ' + @WHERE_VAL
-- this is required to get result into a variable
EXEC sp_executesql @SQL, N'@CNT INT OUTPUT', @CNT = @CNT OUTPUT


SET @SQL = 'UPDATE #CLEANUP_VCDB SET INITIAL_CNT = ' + CONVERT(NVARCHAR, @CNT) + ' WHERE CURRENT OF curse ' 
EXEC(@SQL)


IF (@CNT = 0)
BEGIN
PRINT CONVERT(NVARCHAR, getdate(), 120) + ' ' + @FROM_VAL + ': no matching rows to delete.'
FETCH NEXT FROM curse INTO @FROM_VAL, @WHERE_VAL
CONTINUE
END


PRINT CONVERT(NVARCHAR, getdate(), 120) + ' ' + @FROM_VAL + ': will attempt to delete ' + CONVERT(NVARCHAR, @CNT) + ' rows.'


IF @DELETE_DATA = 1
BEGIN
SET @CNT = 0
SET @TOT = 0


SET ROWCOUNT @BATCH_SIZE


WHILE 1=1
BEGIN
BEGIN TRAN
SET @SQL = 'DELETE FROM ' + @FROM_VAL + ' WHERE ' + @WHERE_VAL
EXEC(@SQL)


SET @CNT = @@ROWCOUNT
SET @TOT = @TOT + @CNT


COMMIT TRAN

IF @CNT < @BATCH_SIZE BREAK
PRINT CONVERT(NVARCHAR, getdate(), 120) + ' completed ' + CONVERT(nvarchar, @TOT) + ' rows...'
END --ROW BATCH LOOP


SET ROWCOUNT 0
PRINT CONVERT(NVARCHAR, getdate(), 120) + ' ' + @FROM_VAL + ': deleted ' + CONVERT(nvarchar, @TOT) + ' total rows.'

SET @SQL = 'UPDATE #CLEANUP_VCDB SET DELETE_CNT = ' + CONVERT(NVARCHAR, @TOT) + ' WHERE CURRENT OF curse ' 
EXEC(@SQL)


END -- DELETE DATA SECTION
ELSE
BEGIN
PRINT CONVERT(NVARCHAR, getdate(), 120) + ' This is a test run, no data was deleted.'
END


FETCH NEXT FROM curse INTO @FROM_VAL, @WHERE_VAL
END -- END CURSOR LOOP


CLOSE curse
DEALLOCATE curse


IF @DELETE_DATA = 1
BEGIN
PRINT ' '
PRINT '****************** SUMMARY *******************' 


DECLARE curse CURSOR FOR
SELECT VPXTABLE, INITIAL_CNT, DELETE_CNT FROM #CLEANUP_VCDB


DECLARE @INITIAL_VAL INT, @DELETE_VAL INT


OPEN curse
FETCH NEXT FROM curse INTO @FROM_VAL, @INITIAL_VAL, @DELETE_VAL


WHILE (@@FETCH_STATUS = 0)
BEGIN
IF (@INITIAL_VAL <> @DELETE_VAL)
BEGIN
PRINT 'Potential problem: attempted to delete ' + CONVERT(NVARCHAR, @INITIAL_VAL) 
+ ' rows, but only ' + CONVERT(NVARCHAR, @DELETE_VAL) + ' deleted.'
END
ELSE
BEGIN
PRINT 'Deleted ' + CONVERT(NVARCHAR, @DELETE_VAL) 
+ ' rows from ' + CONVERT(NVARCHAR, @FROM_VAL) + ' table.'
END


FETCH NEXT FROM curse INTO @FROM_VAL, @INITIAL_VAL, @DELETE_VAL
END


CLOSE curse
DEALLOCATE curse


END --DELETE DATA CHECK


DROP TABLE #CLEANUP_VCDB


ที่มา http://www.vmware.in.th/pumpith/vmware-clean-data-%E0%B8%82%E0%B8%AD%E0%B8%87-vcenter.html

วันพฤหัสบดีที่ 3 พฤษภาคม พ.ศ. 2555

sql server


ทำ SQL instance เดียวหลาย database หรือแยก 1 instance 1 database ดีกว่ากัน
Filed under: SQL Server — Leave a comment
March 1, 2012

คำถามนี้ตอบยากครับ มีหลายปัจจัย เอาเป็นว่า “SQL instance เดียวหลาย database” เมื่อเปรียบเทียบกับ “1 instance 1 database” คือ
ข้อดี

    - ประหยัด resource ทั้ง processing power, และ ram เนื่องจากว่ามี SQLservr.exe แค่ process เดียว ไม่ต้องไปแย่งกับใคร
    - ประหยัดพื้นที่ฮาร์ดดิสก์เพราะทุก database ใช้ executable files ชุดเดียวกัน ในกรณีติดตั้งหลาย instance ก็จะมีไฟล์ SQLservr.exe (และไฟล์ข้างเคียง) ตามจำนวน instance
    - หากมีผู้ใช้งานหลายๆ คน คอนฟิก logins ทีเดียว แล้วนำไปใช้กับได้หลาย database

ข้อจำกัด

    - application ที่เรียกใช้งาน SQL server ทุกตัวต้องสนับสนุน SQL server เวอร์ชั่นเดียวกัน service pack และ hotfix เดียวกัน
    - อาจเกิดปัญหาเรื่อง configuration ได้ เพราะบางครับซอร์ฟแวร์สำเร็จรูปที่เรียกใช้งาน SQL server อาจต้องการ configuration parameter ในระดับของ instance ที่ต่างกันก็ได้
    - หากมี DBA หลายทีม หรือ application owner หลายทีม จะแยกกันทำงานลำบาก

ซึ่งในบางสถานการณ์นอกจากควรจะแยก instance แล้ว แยก OS กันเลยอาจเหมาะสมกว่าครับ
Tags: หลาย databases, หลายดาต้าเบส, แยก instance, instance, sql, sql server
Comment
เลือกเป็น simple recovery model แล้ว ทำไม transaction logs ยังมีขนาดใหญ่
Filed under: SQL Server — Leave a comment
December 9, 2011

เนื่องจากทุก transaction จะต้องถูกเขียนลง log ก่อนที่จะลง data file ดังนั้นหาก transaction มีขนาดใหญ่ เช่น ลบหลาย record ขนาดรวม 5GB ก็จำเป็นต้องเขียน logs ขนาด 5GB แม้ว่าจะเป็น simple recovery model ก็ตาม นอกจากนี้จะทำให้เกิด I/O สูงมากด้วย ดังนั้นแนะนำให้ซอยเป็น transaction ย่อยๆ โดยใช้ TOP และ @@ROWCOUNT มาช่วยทำงานครับ ตัวอย่างตามข้างล่าง


    DECLARE @Done BIT
    SET @Done = 0
    WHILE @Done = 0
      BEGIN
        DELETE TOP (20000) -- reduce if log still growing
          FROM SomeTable WHERE SomeColumn = SomeValue
        IF @@ROWCOUNT = 0
          SET @Done = 1
        CHECKPOINT -- marks log space reusable in simple recovery
      END

ที่มา http://stackoverflow.com/questions/1448857/there-must-be-a-way-to-delete-data-in-sql-server-w-o-overloading-the-log
Comment
Recovery Model คืออะไร
Filed under: SQL Server — Leave a comment
December 9, 2011

Recover Model เป็นโหมดที่จะเลือกการเก็บ transaction logs ว่าจะเก็บอย่างไร
ซึ่งมีอยู่ 3 แบบ แต่ละแบบจะมีรายละเอียดต่างกันคือ
Full

    เก็บทุกอย่าง ปลอดภัยสุด
    ข้อดี
    - เก็บการเปลี่ยนแปลงทั้งหมด หาก database file เสียสามารถกู้คืนได้โดยใช้ transaction logs
    - สามารถ recovery แล้วเลือกเวลาที่ต้องการ (point in time recovery) เช่น database มีปัญหาตอน 12:30น. ดังนั้นสามารถ recovery ไปยังสถานะเมื่อเวลา 12:25 ก่อนที่จะมีปัญหาได้
    ข้อควรระวัง
    - transaction logs จะมีขนาดใหญ่มาก ต้อง backup logs สม่ำเสมอเพื่อป้องกันไม่ให้ logs file โตเกินไป

Simple

    ประหยัดพื้นที่ฮาร์ดดิสก์ที่สุด
    ข้อดี
    - transaction เมื่อ checkpoint แล้วจะลบออก transaction logs file ทำให้ logs file มีขนาดเล็ก
    ข้อควรระวัง
    - หาก database file เสีย ต้อง restore จาก backup เท่านั้น ไม่สามารถนำ transaction logs มา redo ได้
    - ไม่สามารถเลือกว่าจะ restore ไปยังเวลาที่ต้องการได้ restore ได้เฉพาะ ณ เวลาที่ backup เท่านั้น

Bulk-logged

    เหมาะกับงานพวก Analysis Service ที่ต้อง import data ขนาดใหญ่
    ข้อดี
    - เหมือนกับ full ยกเว้นไม่เก็บ transaction logs เวลาทำ bulk insert
    ข้อควรระวัง
    - เหมือนกับ full

โดยสามารถคอนฟิกจาก SQL Server Management Studio (SSMS) มีขั้นตอนดังนี้

    1) คลิ๊กขวาที่ Database Name ที่ต้องการ
    2) เลือก Properties จาก drop down menu
    3) เลือก Options ในกรอบด้านซ้ายมือ
    4) เปลี่ยน recovery model ตามที่ต้องการ
    5) กด OK เพื่อยืนยันการแปลี่ยนแปลง

Tags: bulk, full, simple
Comment
System Database ของ SQL คืออะไร และมีอะไรบ้าง
Filed under: SQL Server — Leave a comment
November 3, 2011

เวลาเราเรียกใช้งาน SQL Server Management Studio (SSMS) จะพบว่า SQL Server นั้นมี database สร้างไว้อยู่แล้ว 4 DB เราจะเรียก DB เหล่านี้ว่า System Database ซึ่งประกอบไปด้วย

Master

    - เป็น database หลัก จะเป็นที่เก็บค่าคอนฟิกของ SQL server เช่น Instance configuration, login, linked server เป็นต้น และจะเป็น database ตัวแรกที่ถูกโหลดขึ้นมาเวลา SQL Server ทำงาน
    - ซึ่งถ้า Master database corrupt ล่ะก็ start service ไม่ขึ้นกันทีเดียว ดังนั้นแนะนำให้ backup Master database ไว้เป็นระยะๆ ด้วยนะครับ

TempDB

    - ตามชื่อเลยครับ เป็น database ชั่วคราว เช่นเป็นที่อยู่ของ temporary tables, พี่พัก result ที่ได้ระหว่าง join หลายๆ table, ที่พักตอน sort, row version สำหรับงาน snapshot
    - โดย TempDB จะถูกเคลียร์ที่ครั้งที่ SQL server start ดังนั้นจึงไม่จำเป็นต้อง backup TempDB
    - และเพื่อให้ SQL server ทำงานได้เร็วขึ้น แนะนำให้ย้าย TempDB ไปไว้ใน disk ลูกที่เร็วที่สุดครับ

Model

    - เป็น template database เช่นถ้าอยากให้ database ใหม่ที่สร้างหลังจากนี้มี table, store procedure, user หรืออื่นๆ อยู่ในทุก database ก็ให้มาสร้าง object เหล่านั้นไว้ใน Model database แต่จะไม่มีผลกับ database ที่เคยสร้างไว้ก่อนหน้าแล้วนะครับ มีผลกับของใหม่เท่านั้น

MSDB

    - ใช้เก็บคอนฟิกของ SQL Agent, SSIS package (หรือ DTS package ในสมัย SQL 2000) นอกจากนี้ยังเก็บข้อมูลประวัติ backup ไว้ด้วย ซึ่งจะมีประโยชน์มากเวลาต้องการรู้ว่า database ไหน backup ไปเมื่อไหร่

นอกจากนี้ยังมี system database อื่นๆ อีกขึ้นอยู่กับว่าได้ติดตั้งและใช้งานฟีเจอร์อื่นๆ หรือไม่ เช่น Resource, Distribution และ ReportServer
Comment
SQL Named Instance คืออะไร
Filed under: SQL Server — Leave a comment
November 1, 2011

Microsoft SQL Server ยอมให้เรามี SQL Server Service หลายๆ ตัวได้ในเครื่องเซิร์ฟเวอร์เดียวกัน โดยใช้ฟีเจอร์ที่ชื่อว่า Named Instance ซึ่งเราสามารถตั้งชื่อ SQL instance แต่ละตัวแยกกันได้ โดยการเรียกใช้จะเป็น “ServerName\InstanceName” ซึ่งจะพ่วงชื่อ instance มาด้วย ต่างกับ default instance ที่อ้างแค่ชื่อเซิร์ฟเวอร์เปล่าๆ แบบนี้ “ServerName”

สำหรับการตั้งชื่อนั้นทำได้ตั้งแต่ตอนที่ติดตั้ง SQL Server โดยหากไม่ระบุ named instance จะได้ชื่อ instance เป็น MSSQLSERVER ซึ่งก็คือ default instance หรือชื่อเซิร์ฟเวอร์เปล่าๆ นั่นเอง และหากต้องการ instance เพิ่มก็แค่รัน setup.exe ซ้ำอีกครั้ง แล้วก็เลือกชื่อ instance ที่ไม่ซ้ำกับของเดิมครับ

    ข้อควรระวังสำหรับผู้ใช้งาน SQL Express Edition
    SQL Express Edition จะต่างกับของเสียเงินนิดนึงหากไม่ระบุชื่อ instance จะสร้าง named instance ที่ชื่อว่า SQLExpress ให้อัตโนมัติ ดังนั้นเวลาใช้งานก็ต้องอ้างเป็น “ServerName\SQLExpress” แต่ถ้าอยากได้ default instance ใน SQL Express Edition ก็ให้เลือกตั้งชื่อเป็น MSSQLSERVER แทน ก็จะได้ default instance เวลาใช้งานสามารถอ้างเป็นชื่อเซิร์ฟเวอร์เปล่าๆ ได้เลยครับ

ข้อดีของการมีหลาย SQL Instance ในเครื่องเดียว
1) สามารถติดตั้ง SQL Server ได้หลายเวอร์ชั่น หลาย Edition ในเซิร์ฟเวอร์เครื่องเดียวกัน เช่น
    1a) มี SQL 2008 R2 Standard สำหรับงาน production และมี SQL 2008 Express สำหรับทำเป็นระบบทดสอบในเครื่องเดียว
    1b) บางโปรแกรมต้องกำหนด collation พิเศษ ซึ่งอาจส่งผลกระทบต่อ database อื่นในกรณีที่มี instance เดียวได้
2) การบริหารจัดการและดูแลรักษาของแต่ละ Named Instance แยกจากกัน
    เช่น เวลาแพตช์ SQL Express ต้องมี downtime ก็ทำได้ โดยอีก instance ที่เป็น SQL Standard ก็ยังทำงานได้ตามปกติ

แล้วข้อควรระวังของหลาย instance ล่ะ
1) ใช้ทรัพยากรของเครื่องเซิร์ฟเวอร์มากกว่า มีหลาย database แต่ใช้ Instance เดียว
2) ต้องระวังเรื่อง Disk I/O throughput และ Network Bandwidth ของ instance ที่ใช้งานสูงอาจกระทบกับ instance อื่นได้
3) ภาระบริหารจัดการจะสูงขึ้นเพราะต้องดูแลหลายที่ เช่น แพตช์, login, permission ก็ต้องทำหลายที่
4) การคิด license
    4a) SQL 2005 – เฉพาะ processor license และ Enterprise server license ที่สามารถทำหลาย instance โดยไม่ต้องซื้อเพิ่มได้
    4b) SQL 2008 – ทั้ง processor license และ server license ไม่ว่าจะ edition ไหน ก็สามารถทำหลาย instance โดยไม่ต้องซื้อเพิ่มได้ อ่านเพิ่ม ที่นี่
    4c) SQL 2008 R2 – ยังไม่มีข้อมูล
    ดังนั้นเรื่อง License แนะนำให้ปรึกษากับไมโครซอฟท์หรือคนขายก่อนจะดีกว่าครับ
Comment
อยากทำ SQL Cluster ต้องมีอะไรบ้าง
Filed under: SQL Server — Leave a comment
October 26, 2011

พูดถึงเรื่อง SQL Server ก็มักจะมีคำถามว่าทำอย่างไรถึงจะทำให้ SQL Server มี high availability คำตอบแรกๆ และง่ายๆ ก็จะเป็นทำ Cluster วันนี้เราจะมีดูกันว่าต้องมีอะไรบ้างครับ

Hardware
1) เครื่องคอมพิวเตอร์ 2 เครื่อง — แน่ล่ะสิทำ cluster ก็ต้องเป็น 2 เครื่อง active กะ stand-by
2) share storage — อันนี้ยากแล้ว ถ้าจะให้ดีประสิทธิภาพสูงก็หนีไม่พ้น SAN หรือถ้าอยากได้ของถูก iSCSI ก็ได้นะ แต่คุณภาพสู้ไม่ได้แน่นอน
3) ระบบ Active Directory — เนื่องจากทุก advanced solution ต้องพึ่ง AD ดังนั้น SQL Cluster ก็เช่นกัน

Software
1) Windows Server 2008 R2 Enterprise Edition 2 licenses — ขอย้ำว่า Enterprise นะ เพราะต้องทำ Microsoft Fail Over Cluster
2) Microsoft SQL Server 2008 R2 Standard Editon 2 license — ถ้าทำแค่ cluster 2 node ใช้แค่ standard ก็พอครับ แต่หากอยากได้มากกว่านั้น ก็คงต้องกัดฟันจ่ายเงินเพิ่มเป็น Enterprise Edition สำหรับของฟรี Express Edition หมดสิทธิ์กับงาน cluster ครับ
3) SQL CALs ตามจำนวน client ถ้าข้อที่แล้วซื้อเป็น processor license ก็ข้ามได้ครับ

วิธีการแบบคร่าวๆ
1) ติดตั้ง Windows Server ลงบนทั้ง 2 เครื่อง และ patch ต่างๆ
2) ติดตั้ง Fail Over Cluster ลงบน Windows ทั้ง 2 เครื่องก่อน (แนะนำว่าควรจะมี share storage สำหรับ quorum disk ด้วย) ขั้นตอนนี้ต้องเตรียม IP เผื่อสำหรับ Virtual IP ของ Fail Over Cluster ด้วยนะครับ
3) ติดตั้ง SQL Cluster โหนดแรก โดยเลือกจาก New SQL Server Failover Cluster Installation ในหน้า Install Wizard ของ SQL
4) ติดตั้ง SQL Cluster โหนดที่สอง คราวนี้เลือก Add node to a SQL Server failover cluster แทนครับ
5) ติดตั้ง service pack และ hotfix อันนี้พิศดารนิดนึง สมัย SQL 2005 ทำที่ active node แล้วมันจะส่งมาที่ passive node ให้เอง แต่พอ SQL 2008 เป็นต้นมา เราต้องทำที่ passive node ก่อน แล้ว failover แล้วค่อยกลับไปทำที่ active node ที่กลายเป็น passive ไปแล้วแทน แม้ว่าจะยุ่งยากขึ้น แต่ downtime ลดลงนะครับ

ปล. High Availability กับ SQL server ไม่ได้มีแค่ Cluster นะครับ ที่พูดกันเยอะเพราะทำง่ายสุดครับ เพราะยังมีหลายทางเลือกเช่น Replication, Log Shipping, Mirroring หรือแม้แต่ Virtualization ก็มีครับ
Comment
อยากใช้ Microsoft SQL Server แต่ไม่อยากเสียเงิน
Filed under: SQL Server — Leave a comment
October 24, 2011

ปัจจุบันโปรแกรมใหม่ๆ มักจำเป็นต้องใช้ฐานข้อมูล ซึ่งหากเป็นโปรแกรมบนวินโดวส์ก็จะมี Microsoft SQL Server อยู่ในรายชื่อแรกๆ แต่ว่าจะทำอย่างไรดีถ้าเราต้องการประหยัดงบ คำตอบง่ายๆ ครับ ทางไมโครซอฟท์แจกโปรแกรม Microsoft SQL Server Express Edition ให้ได้ใช้ฟรีกันมาเรื่อยๆ ซึ่งเวอร์ชั่นล่าสุดเป็น Microsoft SQL Server 2008 R2 Express Edition โดยมีให้เลือกทั้ง 32-bit และ 64-bit ตามแต่วินโดวส์ของผู้ใช้งานครับ นอกจากนี้ยังมีแยกประเภทอีกว่าจะให้รวมหรือไม่รวม Management Studio ซึ่งเป็นซอร์ฟแวร์ที่ใช้บริหารจัดการตัว SQL Server ด้วย โดยตัวผมแนะนำให้เลือกตัวที่รวม Management Studio ไว้จะดีกว่าครับเผื่อต้องมาแก้ปัญหาหรือมาดูคอนฟิกในอนาคตจะได้ไม่ลำบากนักครับ

สำหรับผู้ที่สนใจอยากดาวน์โหลด Microsoft SQL Server 2008 R2 Express Edition ไปใช้งานสามารถเข้าไปที่นี่เลยครับ
http://www.microsoft.com/download/en/details.aspx?id=23650

วันอาทิตย์ที่ 22 เมษายน พ.ศ. 2555

เป้าหมายนักกีตาร์

บัญญัติในการฝึกกีต้าร์เพื่อให้เกิดพัฒนาการยิ่งๆ ขึ้น มีอยู่ว่า

- ก่อนเล่นควรวอร์มนิ้วด้วยการไล่สเกล ต่าง ๆ หรือ โครเมติก ( เพื่อเป็นการยืดเส้น ยืดสาย ของนิ้วมือ )
- ควรฝึกกับเมโทรนอม โดยเริ่มจากช้า ๆ ( เล่นให้ตรงกับจังหวะ )
- เล่นจากช้า ๆ ให้เคลียร์ และ ชัดเจน จากนั้นค่อยๆ เพิ่มความเร็วขึ้นทีละนิด
- ฝึกอย่างอดทน และ ใจเย็น ๆ อย่าใจร้อน
- จะฝึกเล่นเร็วให้ได้ คุณต้องเล่นจากจังหวะช้า ๆ ให้ตรงกับเมโทรนอมสะก่อน เพราะถ้าจังหวะไม่ตรง มันจะมีผลต่อคุณทันทีในระยะยาว ( คุณอาจจะเล่นร่วมกับวงไม่ได้ )
- ท่อนเพลง ท่อนไหน ที่คุณฝึกแล้วยังรู้สึกว่าแทมมิ่งยังไม่ตรง แนะนำว่าให้แก้ไขจุดนั้นทันที โดยอย่าพึ่งข้ามไปเล่นท่อนอื่น ให้เล่นท่อนนั้น ๆ + แทมมิ่งในท่อนนั้นให้เคลียร์สะก่อน
- อย่าพึ่งใส่ใจในเรื่องของสำเนียง เน้นการเล่นให้ชัด และ เคลียร์ไว้ก่อน จากนั้นสำเนียงจะค่อย ๆ มาเอง
- เน้นการฝึกจากขั้นพื้นฐาน ให้ดีสะก่อน ส่วนเรื่องเทคนิคยาก ๆ อย่าพึ่งไปสนใจ
- ฝึกกับเมโทรนอม จนให้รู้สึกว่า ซึมซับอยู่ในหัว ( อย่าลืมนะ ว่า เมโทรนอมเปรียบเสมือน เป็นมือกลองของคุณ )
- การเล่นดนตรี ต้องใช้หูในการฟังเยอะ ๆ ( ยกตัวอย่าง ถ้าฝึกกับเมโทรนอม ให้วางเมโทรนอมไว้ด้านหลังไปเลย ไม่ต้องมองเมโทรนอม ใช้หูฟังเอา )
- สำเนียงของคุณจะมาเอง ( มีข้อแม้ว่า ) คุณต้องเล่นจนนิ้วไปเองโดยธรรมชาติ เล่นจนเลิกกังวลในเรื่องต่าง ๆ
- ความเร็วจะมาเองเช่นกัน โดยที่คุณไม่รู้ตัว ( แต่ว่า คุณก็ต้องฝึกจากช้า ๆ ให้ชัวร์สะก่อน เพราะถ้าช้า ๆ ไม่ชัวร์ เล่นเร็วขอบอกว่า เละเป็นโจ๊กแน่นอน )
- ฝึกการเล่นเพลงต่าง ๆ เยอะ ๆ เพื่อเป็นข้อมูลกับตัวเอง ( เพลงอะไรก็ได้ จะเพลงไทยเพราะ ๆ ก็มีเยอะแยะ )
- ในกรณีที่เล่นคนเดียว ไม่มีเพื่อนเล่น ให้เล่นรึทึ่มอัดเอาไว้ จากนั้นก็เปิดเพื่อฝึกเล่นกับตัวเอง จะเสมือนได้ว่า มีคนเล่นรึทึ่มเพื่อให้เราได้เล่นโซโล่ หรือเล่นในลายอื่น ๆ 
- เน้นในเรื่องของฟอร์มคอร์ดต่าง ๆ ในการจับคอร์ดให้ได้หลายๆ ฟอร์ม ( ทั่วคอกีต้าร์ )
- ควรฝึกสเกลต่างๆ ให้ได้ทุก ๆ คีย์ ทั้ง 5 แพทเทริน์
- การฝึก จำเป็นมาก ๆ ที่จะต้องฝึกให้ถูกต้อง ถูกวิธี ( อันนี้มีผลมากครับ ) เพราะถ้าใจร้อนฝึกแบบผิดวิธี มันจะทำให้เราติดนิสัยฝึกแบบผิด ๆ ขึ้นเรื่อย ๆ มีผลในการเล่นระยะยาวแน่นอน เปรียบเหมือนว่า เราเดินหลงทางไปเรื่อย ๆ 
- เพิ่มความเร็วของแทมโป้ขึ้นทีละนิดในการฝึก ( ฝึกจนไม่รู้สึกว่า "เกร็ง" )
- ควรรู้ในเรื่องของทฤษฎีพื้นฐานบ้าง เช่น คีย์ไหนมีกี่ # คีย์ไหนมีกี่ b ตัวไหนติด # ตัวไหนติด b บ้าง เป็นต้น
- สัดส่วนของตัวโน้ต มีความสำคัญต่อการเล่น ฉะนั้นอย่ามองข้ามในเรื่องของ "สัดส่วน "
- สมาธิเป็นสิ่งสำคัญอีกอย่างหนึ่งของการเล่นกีต้าร์ เพราะฉะนั้น ควรฝึกในเรื่องของสมาธิให้ดี ถ้าสมาธิคุณไม่นิ่ง การเล่นของคุณจะเกิดอาการ "แกว่ง"

ทั้งหมดนี้คือเคล็ดลับง่าย ๆ ( จาก อ. บุญชอบ ) ของการฝึกซ้อมครับ


ที่มา www.guitarthai.com