ผู้ดูแลฐานข้อมูล

ถามตอบสำหรับผู้เชี่ยวชาญด้านฐานข้อมูลที่ต้องการพัฒนาทักษะฐานข้อมูลและเรียนรู้จากผู้อื่นในชุมชน

1
ฉันจะรับผลรวมของฟังก์ชันหน้าต่างใน Postgres ได้อย่างไร
ฉันมีตารางที่มีสองคอลัมน์ของพีชคณิต / การรวมกันของอาร์เรย์จำนวนเต็มและคอลัมน์ที่สามที่มีค่าเช่น: CREATE TABLE foo ( perm integer[] NOT NULL, combo integer[] NOT NULL, value numeric NOT NULL DEFAULT 0 ); INSERT INTO foo VALUES ( '{3,1,2}', '{1,2,3}', '1.1400' ), ( '{3,1,2}', '{1,2,3}', '0' ), ( '{3,1,2}', '{1,2,3}', '1.2680' ), ( '{3,1,2}', '{1,2,3}', '0' ), ( '{3,1,2}', '{1,2,3}', '1.2680' …

1
SQL Server 2012 Simple Recovery Model ที่มี LOG_BACKUP log_reuse_wait_desc
ในขณะที่ฉันกำลังทำการตรวจสอบของตัวเองไม่มีใครรู้ว่าทำไมฐานข้อมูลในSIMPLEรูปแบบการกู้คืนมีLOG_BACKUPไว้เพื่อlog_reuse_wait_descอะไร SQL Server 2012 SP1 ฐานข้อมูลสร้างขึ้นเมื่อไม่กี่สัปดาห์ที่ผ่านมา ไม่มีการจำลองแบบไม่มีการมิเรอร์ไม่มีบันทึกการจัดส่งและไม่เคยมีสิ่งเหล่านี้ เราทำการสำรองฐานข้อมูลและกู้คืนไปยังอินสแตนซ์อื่นซึ่งจะแสดงSIMPLEและNOTHINGในlog_reuse_waitอินสแตนซ์อื่น แต่ฉันไม่คิดว่าการกู้คืนไปยังอินสแตนซ์อื่นเป็นวิธีที่ดีในการทำให้เกิดปัญหาอีกครั้งเนื่องจากการเรียกคืนการดำเนินการธุรกรรมย้อนกลับ / ย้อนกลับ

1
ฉันจะขอบันทึกรายการธุรกรรม postgresql ได้อย่างไร
ฉันมีปัญหาดังต่อไปนี้: การแจกจ่าย Linux "แนวตั้ง" (Sophos UMT) มาพร้อมกับ PostgreSQL 9.2 เพื่อจัดเก็บการกำหนดค่า น่าเสียดายเนื่องจากการอัปเดตครั้งล่าสุดดูเหมือนว่าทรานแซกชันบันทึก (WAL) ของบางอินสแตนซ์จะเพิ่มขึ้นโดยไม่ต้องล้างออก สิ่งนี้ทำให้โฟลเดอร์ pg_xlog โตขึ้นเป็นลำดับขนาดใหญ่กว่าโฟลเดอร์ฐาน ตอนนี้ฉันอยู่ในสถานการณ์ที่ละเอียดอ่อน: เนื่องจากการเติบโตของไฟล์ WAL ที่มากเกินไปดิสก์ของหนึ่งในเครื่องเหล่านี้ (VM) จะเต็มก่อนวันจันทร์ ฉันได้เปิดเคสการสนับสนุนกับผู้จำหน่ายแล้ว แต่จนถึงตอนนี้พวกเขาไม่ได้มีประโยชน์มาก (พวกเขาแนะนำให้เราสร้าง VM ใหม่ด้วยดิสก์ขนาดใหญ่) ฐานข้อมูลนี้ไม่ถูกสำรองเนื่องจากซอฟต์แวร์ทำการสำรองข้อมูลในลักษณะที่แตกต่างกัน (มีขั้นตอนการสำรองข้อมูลของตัวเองและส่งไฟล์สำรองทางอีเมล) และฉันคิดว่านี่เป็นสาเหตุที่ WAF เติบโตขึ้นอย่างมาก ฉันกลัวว่าฉันไม่ได้เป็นผู้เชี่ยวชาญของ PostgreSQL ดังนั้นจึงเป็นไปได้มากที่ฉันจะถามคำถามที่งี่เง่าหรือชัดเจน แต่ขั้นตอนในการร้องขอไฟล์ WAL จะถูกล้างออกเป็นอย่างไร เป็นการดีที่ฉันกำลังมองหาขั้นตอนที่จะทำให้ฉันสามารถล้างไฟล์ WAL เหล่านี้ในระบบที่มีปัญหาเพื่อซื้อเวลาให้เพียงพอเพื่อให้ผู้ขายออกการแก้ไขที่ดีกว่า แก้ไข : ตามที่ร้องขอนี่คือผลลัพธ์ของSELECT version();แบบสอบถาม: PostgreSQL 9.2.4 on i686-pc-linux-gnu, compiled …
11 postgresql 

3
รับการเกิดขึ้นครั้งที่ 2 หรือ 3 ของค่าในสตริงที่มีการคั่น
ฉันมีตารางต่อไปนี้: ========================================================== | Name_Level_Class_Section | Phone Num | ========================================================== | Jacky_1_B2_23 | 1122554455 | | Johnhy_1_B2_24 | 1122554455 | | Peter_2_A5_3 | 1122554455 | ========================================================== ฉันกำลังคิดที่จะทำให้คำสั่ง SQL ของฉันง่ายขึ้นดังต่อไปนี้: select *, substring(Name_Level_Class_Section, CHARINDEX('_',Name_Level_Class_Section, (CHARINDEX('_', Name_Level_Class_Section) + 1)) + 1, CHARINDEX('_',Name_Level_Class_Section, (CHARINDEX('_',Name_Level_Class_Section, (CHARINDEX('_',Name_Level_Class_Section)+1))+1))- CHARINDEX('_',Name_Level_Class_Section, (CHARINDEX('_',Name_Level_Class_Section)+1))) as CLA from Bookings order by CLA …

2
ถ้าฉันล้มเหลวในฐานข้อมูลหนึ่งให้คนอื่น ๆ ที่ใช้จุดปลายมิรเรอร์เดียวกันล้มเหลวด้วยหรือไม่?
เรามีการติดตั้งฐานข้อมูลสองชุดสำหรับการมิเรอร์บนอินสแตนซ์ SQL Server เดียว: ฐานข้อมูลทดสอบและฐานข้อมูลการผลิต ทั้งสองได้มิร์เรอร์ไปยังเซิร์ฟเวอร์อื่นโดยใช้จุดปลายเดียวกันที่แน่นอน ถ้าฉันไปที่ฐานข้อมูลคุณสมบัติสำหรับฐานข้อมูลทดสอบและคลิกปุ่ม "Failover" มันจะล้มเหลวบนฐานข้อมูลการผลิตเช่นกันเนื่องจากฐานข้อมูลทั้งสองใช้จุดปลายทางมิเรอร์และคุณสมบัติที่อยู่เครือข่ายเซิร์ฟเวอร์ของพวกเขาเหมือนกันหรือไม่ ฉันกังวลเพราะเมื่อฉันตั้งค่าการมิเรอร์สำหรับฐานข้อมูลที่ 2 ฉันไม่จำเป็นต้องกำหนดค่าอะไรใหม่ มันใช้ข้อมูลที่มีอยู่ทั้งหมด ถ้าฉันใช้ปุ่ม "Failover" จากคุณสมบัติของฐานข้อมูลมันจะทำให้เกิดความล้มเหลวในฐานข้อมูลทั้งหมดที่ใช้จุดปลายนั้นหรือเพียงแค่ฐานข้อมูลเฉพาะที่ฉันกำลังดูคุณสมบัติใช่หรือไม่

4
ฉันจะเขียนคิวรีหน้าต่างที่รวมคอลัมน์เพื่อสร้างที่เก็บข้อมูลแยกได้อย่างไร?
ฉันมีตารางที่มีคอลัมน์ของค่าทศนิยมเช่นนี้ id value size -- ----- ---- 1 100 .02 2 99 .38 3 98 .13 4 97 .35 5 96 .15 6 95 .57 7 94 .25 8 93 .15 สิ่งที่ฉันต้องทำให้สำเร็จเป็นเรื่องยากที่จะอธิบายดังนั้นโปรดอดทนด้วย สิ่งที่ผมพยายามทำคือการสร้างมูลค่ารวมของsizeคอลัมน์ที่เพิ่มขึ้นโดยที่ 1 ในแต่ละครั้งแถวก่อนหน้านี้รวมถึง 1 valueเมื่อเรียงลำดับตาม ผลลัพธ์จะเป็นดังนี้: id value size bucket -- ----- ---- ------ 1 100 .02 1 …

2
จะปรับปรุงการประมาณแถวได้อย่างไรเพื่อลดโอกาสของการหกถึง tempdb
ฉันสังเกตเห็นว่าเมื่อมีการรั่วไหลของเหตุการณ์ tempdb (ทำให้เกิดการสืบค้นที่ช้า) ซึ่งบ่อยครั้งที่การประมาณแถวนั้นเป็นวิธีการปิดการเข้าร่วมแบบเฉพาะ ฉันเคยเห็นเหตุการณ์การรั่วไหลเกิดขึ้นจากการรวมและแฮชรวมและพวกเขามักจะเพิ่มรันไทม์ 3x เป็น 10x คำถามนี้เกี่ยวข้องกับวิธีปรับปรุงการประมาณการแถวภายใต้สมมติฐานว่าจะลดโอกาสการเกิดเหตุการณ์หก จำนวนแถวจริง 40k สำหรับแบบสอบถามนี้แผนจะแสดงค่าประมาณแถวที่ไม่ดี (11.3 แถว): select Value from Oav.ValueArray where ObjectId = (select convert(bigint, Value) NodeId from Oav.ValueArray where PropertyId = 3331 and ObjectId = 3540233 and Sequence = 2) and PropertyId = 2840 option (recompile); สำหรับแบบสอบถามนี้แผนแสดงการประมาณแถวที่ดี (56k แถว): declare @a …

3
การปัดเศษทศนิยมอัตโนมัติ
คำถามนั้นค่อนข้างง่าย ฉันต้องการคำนวณ 3 คอลัมน์ที่ผลลัพธ์กลางคือทศนิยมมากและฉันพบปัญหาในช่วงต้นกับ SQL Server โดยทั่วไปการปัดเศษทศนิยมโดยไม่คำนึงถึงการแปลง / แปลงใด ๆ ตัวอย่างเช่นลองทำหารง่าย ๆ เป็น 1234/1233 เครื่องคิดเลขจะผลิต 1,00081103000811 แต่เมื่อฉันทำเช่นนี้บน SQL Server เราได้รับต่อไปนี้: -- Result: rounded at 1.000811000... with trailing zeroes up until the 37 precision SELECT CAST(CAST(1234 AS DEC(38,34))/CAST(1233 AS DEC(38,34)) AS DEC(38,37)) -- Result: rounded at 1.000811 SELECT CONVERT(DECIMAL(38,32), 1234)/CONVERT(DECIMAL(38,32),1233) -- …

1
Postgres: count (*) vs count (id)
ผมเห็นในเอกสารความแตกต่างระหว่างและcount(*) count(pk)ผมเคยใช้count(pk)(ที่pkเป็นSERIAL PRIMARY KEY) count(*)ไม่ทราบว่าเกี่ยวกับการดำรงอยู่ของ คำถามของฉันเกี่ยวกับการเพิ่มประสิทธิภาพภายในของ Postgres มันฉลาดพอที่จะรับได้หรือไม่ว่าSERIAL PRIMARY KEYจะมีอยู่ในทุกแถวและไม่ผิดและนับจำนวนแถวหรือจะตรวจสอบคำกริยาซ้ำซ้อนสำหรับแต่ละแถวหรือไม่ ฉันยอมรับว่านี่อาจเป็นการเพิ่มประสิทธิภาพที่ไม่มีจุดหมายมากเกินไป แต่ฉันแค่อยากรู้ ผมเอามาดูที่การส่งออกของได้EXPLAINและEXPLAIN VERBOSEสำหรับcount(*), count(id)และcount(id > 50)เพื่อดูว่าEXPLAINกล่าวถึงการตรวจสอบภาคในการส่งออกของตน มันไม่ได้

5
การตั้งค่าหน่วยความจำสูงสุดใน SQL Server
ฉันใช้ SQL Server 2008 และแอปพลิเคชันบนเว็บบนเซิร์ฟเวอร์เฉพาะเครื่องเดียวมีหน่วยความจำเพียง 2Gb เท่านั้น ตามที่ระบุไว้ที่อื่น SQL Server ใช้หน่วยความจำกายภาพสูงสุดถึง 98% เป็นประจำซึ่งดูเหมือนจะทำให้เว็บแอพพลิเคชันทำงานช้าลงบนเซิร์ฟเวอร์ ในคุณสมบัติเซิร์ฟเวอร์ใน SSMS ภายใต้หน่วยความจำหน่วยความจำเซิร์ฟเวอร์สูงสุด (เป็น Mb) ถูกตั้งค่าเป็น: 2147483647 คำถามของฉันคือจำนวนที่แนะนำที่จะใส่ในกล่องหน่วยความจำเซิร์ฟเวอร์สูงสุดตามจำนวนหน่วยความจำที่ฉันมีอยู่และเซิร์ฟเวอร์เดียวกันก็ใช้งานเว็บแอปพลิเคชันด้วยหรือไม่ นอกจากนี้การเปลี่ยนหมายเลขนี้เป็นเรื่องที่ปลอดภัยหรือไม่ในขณะที่ SQL Server กำลังทำงานอยู่ ขอบคุณสำหรับคำแนะนำ.

2
อัลกอริทึมสำหรับการค้นหาคำนำหน้าที่ยาวที่สุด
ฉันมีสองตาราง สิ่งแรกคือตารางที่มีคำนำหน้า code name price 343 ek1 10 3435 nt 4 3432 ek2 2 ประการที่สองคือบันทึกการโทรพร้อมหมายเลขโทรศัพท์ number time 834353212 10 834321242 20 834312345 30 ฉันต้องการเขียนสคริปต์ที่ค้นหาคำนำหน้าที่ยาวที่สุดจากคำนำหน้าสำหรับแต่ละระเบียนและเขียนข้อมูลทั้งหมดนี้ไปยังตารางที่สามเช่นนี้ number code .... 834353212 3435 834321242 3432 834312345 343 สำหรับหมายเลข 834353212 เราจะต้องตัด '8' แล้วหารหัสที่ยาวที่สุดจากตารางคำนำหน้า 3435 เราจะต้องวางแรก '8' และคำนำหน้าจะต้องอยู่ในจุดเริ่มต้น ฉันแก้ไขงานนี้เมื่อนานมาแล้วด้วยวิธีที่ไม่ดีมาก มันเป็นสคริปต์ Perl ที่แย่มากซึ่งทำแบบสอบถามจำนวนมากสำหรับแต่ละเร็กคอร์ด สคริปต์นี้: ใช้หมายเลขจากตารางการโทรทำสตริงย่อยจากความยาว (หมายเลข) ถึง …

3
วิธีปฏิบัติที่ดีที่สุดสำหรับไฟล์บันทึก tempdb
ฉันได้อ่านหลายบล็อกที่นี่และมีเกี่ยวกับวิธีการกำหนดค่า tempdb แฟ้มข้อมูล แต่ไม่ได้ฉันพบข้อมูลใด ๆ เกี่ยวกับการล็อกไฟล์ tempdb นี่เป็นกลยุทธ์ที่ฉันใช้กับ tempdb ของฉัน: ฉันใช้คำแนะนำของ Paul Randalในการแบ่งไฟล์ข้อมูล tempdb ของฉัน ฉันได้ตั้งค่าขนาดของไฟล์ข้อมูล tempdb ให้เป็นค่าสูงสุดและปิดการใช้งานอัตโนมัติ ตัวอย่างเช่นฉันมีพื้นที่ว่างในดิสก์ 100GB และตั้งขนาดของไฟล์ข้อมูล 8 tempdb ของฉันเป็น 10gb ต่อไฟล์ วิธีนี้ช่วยป้องกันการแตกแฟรกเมนต์บนดิสก์ตามที่ Brent Ozar แนะนำและฉันมี 20GB ฟรีสำหรับไฟล์บันทึกของฉัน แต่ชอบพูดว่าไม่มีใครจะพูดคุยเกี่ยวกับแฟ้มบันทึก tempdb ฉันควรทำอย่างไรกับมัน? ในการตั้งค่าของฉันไฟล์นี้อยู่ในที่เดียวกับไฟล์ข้อมูล tempdb ขนาดและค่า autogrowth ที่ฉันควรใช้กับล็อกไฟล์ tempdb คืออะไร

2
การบีบอัดข้อมูล SQL Server นั้นดีสำหรับฐานข้อมูลแบบอ่านอย่างเดียวหรือไม่?
บางวรรณกรรมเกี่ยวกับการบีบอัดข้อมูล SQL Server ฉันอ่านว่าค่าใช้จ่ายในการเขียนเพิ่มขึ้นประมาณสี่เท่าตามปกติ ดูเหมือนว่านี่เป็นข้อเสียเปรียบหลักของการบีบอัดข้อมูลซึ่งหมายความว่าสำหรับฐานข้อมูลการเก็บถาวรแบบอ่านอย่างเดียวประสิทธิภาพจะดีขึ้นด้วยการใช้การบีบอัดข้อมูลที่เต็มหน้า 100% ข้อความข้างต้นเป็นจริงหรือไม่ "การเปลี่ยนแปลง" หลักระหว่างการบีบอัดข้อมูลกับอะไร (สำหรับการอ่าน) "CPU + x%" "IO -y%"? หน้าแยกเกิดขึ้น? การใช้งาน tempdb? การใช้ RAM? และสำหรับการเขียน? สำหรับวัตถุประสงค์ของคำถามนี้คุณสามารถ จำกัด บริบทเป็นการบีบอัดระดับหน้าของฐานข้อมูลขนาดใหญ่(> 1TB)แต่ยินดีต้อนรับความคิดเห็นเพิ่มเติมเสมอ อ้างอิง: บล็อก SQL Server Storage Engine (สถานการณ์สมมติ DW แสดงให้เห็นว่าการบีบอัดมีประโยชน์มาก) การบีบอัดข้อมูล: กลยุทธ์การวางแผนกำลังการผลิตและวิธีปฏิบัติที่ดีที่สุด วิธีการที่มีรายละเอียดมากขึ้นในการตัดสินใจว่าจะบีบอัดอะไรเกี่ยวข้องกับการวิเคราะห์คุณสมบัติเวิร์กโหลดสำหรับแต่ละตารางและดัชนี มันขึ้นอยู่กับสองตัวชี้วัดต่อไปนี้: U: เปอร์เซ็นต์ของการดำเนินการอัปเดตบนตารางดัชนีหรือพาร์ติชันเฉพาะเมื่อเทียบกับการดำเนินการทั้งหมดบนวัตถุนั้น ยิ่งค่าของ U ต่ำลง (นั่นคือตารางดัชนีหรือพาร์ติชันถูกอัพเดตนาน ๆ ครั้ง) ผู้สมัครที่ดีกว่าสำหรับการบีบอัดหน้า S: เปอร์เซ็นต์ของการดำเนินการสแกนบนตารางดัชนีหรือพาร์ติชันสัมพันธ์กับการดำเนินการทั้งหมดบนวัตถุนั้น ยิ่งค่าของ …

1
ข้อผิดพลาด: ฟังก์ชัน set_valued เรียกในบริบทที่ไม่สามารถยอมรับชุดได้ มันเกี่ยวกับอะไร?
ฉันใช้ Postgresql 9.1 กับ Ubuntu 12.04 ได้รับแรงบันดาลใจจากคำตอบของ Craig ต่อคำถามของฉันการเรียง setof หรือ setof recordฉันคิดว่าฉันจะใช้return queryงานได้setof recordดีและเป็นตัวสร้างซีรีส์ในฟังก์ชั่น plpgsql นี้: create or replace function compute_all_pair_by_craig(id_obj bigint) returns setof record as $$ begin return query select o.id, generate_series(0,o.value) from m_obj as o; end; $$ language plpgsql; ในระหว่างการดำเนินการฉันได้รับข้อผิดพลาด: ERROR: set_valued function called in context that …


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.