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

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

3
การปรับลำดับชั้นของ CTE ให้เหมาะสม
อัปเดตด้านล่าง ฉันมีตารางบัญชีที่มีสถาปัตยกรรมบัญชี acct / parent โดยทั่วไปเพื่อแสดงลำดับชั้นของบัญชี (SQL Server 2012) ฉันสร้างมุมมองโดยใช้ CTE เพื่อตัดลำดับชั้นและโดยรวมแล้วทำงานได้อย่างสวยงามและตามที่ตั้งใจไว้ ฉันสามารถสอบถามลำดับชั้นได้ทุกระดับและดูสาขาได้อย่างง่ายดาย มีฟิลด์ตรรกะทางธุรกิจหนึ่งฟิลด์ที่จำเป็นต้องส่งคืนเป็นฟังก์ชันของลำดับชั้น ฟิลด์ในแต่ละบัญชีบันทึกอธิบายขนาดของธุรกิจ (เราจะเรียกว่า CustomerCount) ตรรกะที่ฉันต้องการในการรายงานความต้องการในการสะสม CustomerCount จากสาขาทั้งหมด กล่าวอีกนัยหนึ่งเมื่อได้รับบัญชีฉันต้องสรุปยอดเงินของลูกค้าสำหรับบัญชีนั้นพร้อมกับเด็กทุกคนในทุกสาขาด้านล่างบัญชีตามลำดับชั้น ฉันคำนวณฟิลด์สำเร็จโดยใช้ฟิลด์ลำดับชั้นที่สร้างขึ้นภายใน CTE ซึ่งดูเหมือน acct4.acct3.acct2.acct1 ปัญหาที่ฉันพบคือทำให้มันทำงานได้เร็ว หากไม่มีฟิลด์คำนวณนี้แบบสอบถามจะทำงานใน ~ 3 วินาที เมื่อฉันเพิ่มในเขตข้อมูลจากการคำนวณมันจะกลายเป็นแบบสอบถาม 4 นาที นี่คือรุ่นที่ดีที่สุดที่ฉันสามารถพบได้เพื่อให้ได้ผลลัพธ์ที่ถูกต้อง ฉันกำลังมองหาแนวคิดในการปรับโครงสร้างมุมมองนี้โดยไม่ต้องเสียสละอย่างมากต่อการแสดง ฉันเข้าใจเหตุผลที่สิ่งนี้ช้าลง (ต้องคำนวณภาคแสดงในส่วนคำสั่งที่ไหน) แต่ฉันไม่สามารถคิดวิธีอื่นในการจัดโครงสร้างและยังได้ผลลัพธ์เดียวกัน นี่คือตัวอย่างรหัสบางส่วนเพื่อสร้างตารางและทำ CTE ให้ตรงตามที่ใช้ในสภาพแวดล้อมของฉัน Use Tempdb go CREATE TABLE dbo.Account ( Acctid varchar(1) …

4
รวมตัวเองแบบเรียกซ้ำ
ฉันมีcommentsตารางซึ่งสามารถทำให้ง่ายลงไปนี้: comments ======= id user_id text parent_id โดยที่parent_idnullable แต่อาจเป็นกุญแจสำคัญสำหรับความคิดเห็นหลัก ตอนนี้ฉันจะselectทายาทของความคิดเห็นเฉพาะได้อย่างไร ความคิดเห็นอาจลดลงหลายระดับ ...

2
วิธีเพิ่มประสิทธิภาพการสืบค้น T-SQL โดยใช้ Execution Plan
ฉันมีแบบสอบถาม SQL ที่ฉันใช้เวลาสองวันที่ผ่านมาพยายามเพิ่มประสิทธิภาพโดยใช้การทดลองและข้อผิดพลาดและแผนการดำเนินการ แต่ไม่มีประโยชน์ โปรดยกโทษให้ฉันที่ทำเช่นนี้ แต่ฉันจะโพสต์แผนการดำเนินการทั้งหมดที่นี่ ฉันได้ใช้ความพยายามในการสร้างชื่อตารางและคอลัมน์ในแบบสอบถามและแผนปฏิบัติการทั่วไปทั้งเพื่อความกระชับและเพื่อปกป้อง IP ของ บริษัท ของฉัน แผนปฏิบัติการสามารถเปิดได้กับSQL ยามแผน Explorer ที่ ฉันทำ T-SQL ในปริมาณที่พอใช้ แต่การใช้แผนการดำเนินการเพื่อเพิ่มประสิทธิภาพการสืบค้นของฉันเป็นพื้นที่ใหม่สำหรับฉันและฉันได้พยายามเข้าใจวิธีการทำ ดังนั้นหากใครสามารถช่วยฉันด้วยและอธิบายว่าแผนปฏิบัติการนี้สามารถถอดรหัสเพื่อค้นหาวิธีในการค้นหาเพื่อเพิ่มประสิทธิภาพได้ฉันจะขอบคุณตลอดไป ฉันมีคำถามเพิ่มเติมเพื่อเพิ่มประสิทธิภาพ - ฉันต้องการกระดานกระโดดน้ำเพื่อช่วยฉันในเรื่องนี้เป็นครั้งแรก นี่คือแบบสอบถาม: DECLARE @Param0 DATETIME = '2013-07-29'; DECLARE @Param1 INT = CONVERT(INT, CONVERT(VARCHAR, @Param0, 112)) DECLARE @Param2 VARCHAR(50) = 'ABC'; DECLARE @Param3 VARCHAR(100) = 'DEF'; DECLARE @Param4 VARCHAR(50) …

2
ตารางถูกทำเครื่องหมายว่าขัดข้องและควรได้รับการซ่อมแซม
ฉันมี MySQL และ Nagios ติดตั้ง Linux PC (Centos5.5) ฉันได้เขียนสคริปต์บางอย่างเพื่อดึงข้อมูลจาก Nagios ไปยัง Mysql DB (ดึงข้อมูลในตาราง) การดึงข้อมูลทำงานอย่างถูกต้อง (ยืนยันด้วย 'COUNT' cmd) ปัญหาเมื่อฉันเรียกใช้คำสั่งต่อไปนี้มันผ่านข้อผิดพลาดดังต่อไปนี้ mysql> select * จาก nagios_servicechecks; ข้อผิดพลาด 1194 (HY000): ตาราง 'nagios_servicechecks' ถูกทำเครื่องหมายว่าขัดข้องและควรซ่อมแซม ยกเว้นคำสั่งนี้คำสั่งอื่น ๆ ทั้งหมดทำงานได้ดี
15 mysql  linux  restore 

2
ผู้ขายต้องการเรียกใช้งาน MSDB ทุก ๆ 5 นาทีสำหรับแอปพลิเคชันธุรกิจ
เรามีผู้จำหน่ายบุคคลที่สามที่พยายามรวม 2 แอพพลิเคชั่นที่ต่างกันซึ่งทั้งคู่อยู่ในอินสแตนซ์ของ SQL Server ของเราด้วย 150+ ฐานข้อมูลอื่น ๆ และพวกเขาต้องการสร้างงาน MSDB เพื่อ "ซิงค์" แอพพลิเคชั่น ต้องการเรียกใช้ทุกนาที) ลางสังหรณ์เริ่มต้นของฉันคือพวกเขาควรทำสิ่งนี้แทนในระดับแอปพลิเคชันด้วยงานที่กำหนดเวลาไว้กับ Windows หรืออาจเป็นทริกเกอร์ที่หวั่นเกรง (ซึ่งเรามักจะหันไปใช้ในสถานการณ์เช่นนี้) ฉันต้องการให้งาน MSDB สงวนไว้สำหรับงาน DBA ให้มากที่สุดเพื่อลดความยุ่งเหยิงที่นั่นและยังมีการสืบค้น MSDB ที่ช้าเมื่อดูประวัติงานด้วยงานแอคทีฟสุด ๆ เช่นนี้ (ซึ่งยังจมอยู่และเลื่อนประวัติงานสำคัญของ สิ่งที่สำคัญกว่าเช่นประวัติการสำรองข้อมูล) แต่แล้วอีกครั้งบางทีการตั้งค่าของฉันผิดและฉันต้องทำให้บางพื้นที่สำหรับ Application Tier ใน MSDB และพับแขนเสื้อของฉันและแก้ไขปัญหาประวัติงานสละเวลาตลอดไปในการโหลดเมื่อฉันต้องการเก็บรายการประวัติเพิ่มเติมเพื่อจับภาพ สิ่งสำคัญเช่นการสำรองข้อมูล (หรือล้างรายการงานที่ใช้งานมากเกินไป) ปัญหาอื่นที่ฉันมีคือตอนนี้ฉันต้องให้สิทธิ์ผู้ดูแลระบบ "sysadmin" นี้แทนสิทธิ์ "dbo" เฉพาะบน DBs ของพวกเขาเท่านั้นเมื่อพวกเขาทำการอัปเกรดผ่าน GUI และหวังว่าพวกเขาจะไม่ระเบิดอินสแตนซ์ที่ภารกิจสำคัญของฉัน ฐานข้อมูลคือ (หนึ่งในข้อเสียของการรวม) ฉันเดาว่าฉันสามารถใส่พวกเขาในอินสแตนซ์ …

2
“ ORA-01950: ไม่มีสิทธิ์บน tablespace 'SYSTEM'”: เกิดข้อผิดพลาดอะไร?
ก่อนหน้านี้ฉันสร้างผู้ใช้: SQL>create user suhail identified by password SQL>User created. SQL>Grant create session,create table to suhail; SQL>Grant Succeeded. แต่เมื่อฉันเข้าสู่ระบบเป็นsuhailและพยายามที่จะสร้างที่ฉันได้รับข้อผิดพลาดว่าtable ORA-01950: no privileges on tablespace 'SYSTEM'มันเกิดข้อผิดพลาดอะไร? ทำไมมันเกิดขึ้น? SQL> connect suhail Enter password: Connected. SQL> create table suhail_table(name char(10)); create table suhail_table(name char(10)) * ERROR at line 1: ORA-01950: no privileges on tablespace …


2
วิธีการใช้การเชื่อมต่อร่วมกันที่ดีที่สุดใน SQLAlchemy สำหรับการรวมธุรกรรมระดับ PgBouncer?
ใช้ SQLAlchemy เพื่อสืบค้นฐานข้อมูล PostgreSQL ที่อยู่เบื้องหลัง PgBouncer โดยใช้การรวมกำไรระดับธุรกรรม รูปแบบที่ดีที่สุดที่จะใช้สำหรับการตั้งค่าประเภทนี้คืออะไร ฉันควรมีหนึ่งเครื่องยนต์ต่อกระบวนการใช้ConnectionPoolหรือฉันควรสร้างเครื่องยนต์ตามคำขอและใช้NullPoolสำหรับแต่ละเครื่องยนต์หรือไม่ มีรูปแบบที่แตกต่างกันโดยสิ้นเชิงที่ฉันควรใช้หรือไม่ ขอบคุณมาก ๆ! แจ้งให้เราทราบหากต้องการข้อมูลเพิ่มเติมและฉันจะอัปเดตโดยเร็ว

4
ฉันควร VACUUM ฐานข้อมูล PostgreSQL ของฉันด้วยตนเองหรือไม่หากเปิดเครื่องอัตโนมัติ
ฉันใช้ซอฟต์แวร์ที่สร้างฐานข้อมูล PostgreSQL ขนาดใหญ่ (มีตารางหนึ่งล้านแถว) และผู้พัฒนาบอกว่าฉันควรทำVACUUMและควรทำเป็นANALYZEระยะ แต่ฐานข้อมูล PostgreSQL จะถูกautovacuumเปิดใช้งาน ฉันควรดูดฝุ่น / วิเคราะห์เลยหรือไม่? ประโยชน์คืออะไร ความแตกต่างระหว่างสูญญากาศอัตโนมัติและแมนนวลคืออะไร ตัวอย่างเช่นใน Pgadmin3 ฉันมีสิ่งนี้:

6
SQL Server 2012 ช้ากว่า 2008
ฉันย้ายเว็บไซต์ขนาดใหญ่และฐานข้อมูลจากเซิร์ฟเวอร์เก่า (Windows 2008 / SQL Server 2008/16 GB RAM / 2 x 2.5 GHz Quad Core / ดิสก์ SAS) ไปยังเซิร์ฟเวอร์รุ่นใหม่ที่ดีกว่ามาก (Windows 2008 R2 / SQL Server 2012 SP1 / 64 GB RAM / 2 x 2.1 GHz 16 คอร์โปรเซสเซอร์ / ดิสก์ SSD) ฉันแยกไฟล์ฐานข้อมูลบนเซิร์ฟเวอร์เก่าคัดลอกและแนบไฟล์บนเซิร์ฟเวอร์ใหม่ ทุกอย่างเป็นไปด้วยดี หลังจากนั้นฉันเปลี่ยนเป็นระดับความเข้ากันได้เป็น 110 สถิติที่อัปเดตสร้างดัชนีใหม่ สำหรับความผิดหวังครั้งใหญ่ของฉันฉันสังเกตว่าการสืบค้น sql ส่วนใหญ่นั้นช้ากว่ามาก …

3
มีการแชร์อะไรระหว่างสองอินสแตนซ์บนเซิร์ฟเวอร์เดียวกัน
เราต้องการติดตั้ง SQL Server หลายอินสแตนซ์บนเซิร์ฟเวอร์ Windows เครื่องเดียว เราไม่สามารถใช้ VM ได้เพราะเซิร์ฟเวอร์นั้นเป็นโลหะเปลือย Windows 2008 R2 เพื่อจุดประสงค์ด้านความปลอดภัยเราจำเป็นต้องตรวจสอบให้แน่ใจว่าทั้งสองอินสแตนซ์ไม่มีส่วนเกี่ยวข้องใด ๆ รวมถึงการจัดการบริการ Windows บัญชีและอื่น ๆ ดังนั้นฉันเดาว่าคำถามคือ: เมื่อติดตั้ง "อินสแตนซ์" ของ SQL Server มากกว่าหนึ่งตัวบนเซิร์ฟเวอร์ Windows จะมีการแชร์อะไรบ้าง

3
เหตุใดจึงมีแผนปฏิบัติการแตกต่างกันระหว่าง OFFSET … FETCH และแบบ ROW_NUMBER แบบเก่า
OFFSET ... FETCHรุ่นใหม่แนะนำด้วย SQL Server 2012 เสนอการเพจที่ง่ายและเร็วขึ้น ทำไมจึงมีความแตกต่างใด ๆ เมื่อพิจารณาว่าทั้งสองรูปแบบมีความหมายเหมือนกันและเป็นเรื่องธรรมดามาก? ใครจะสันนิษฐานว่าเครื่องมือเพิ่มประสิทธิภาพรับรู้ทั้งสองและเพิ่มประสิทธิภาพพวกเขา (เล็กน้อย) อย่างเต็มที่ นี่เป็นกรณีที่ง่ายมากซึ่งOFFSET ... FETCHเร็วกว่าประมาณ 2 เท่าตามประมาณการต้นทุน SELECT * INTO #objects FROM sys.objects SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY object_id) r FROM #objects ) x WHERE r >= 30 AND r < (30 + 10) …


3
ทำไมฉันต้องเลือกจากตารางคู่
ผลงานในฐานข้อมูลความสัมพันธ์ที่สำคัญระบบการจัดการนี้ส่วนใหญ่มีแนวโน้มที่จะปรากฏใน StackOverflow / dba.stackexchange เป็นSQL Server, MySQL, PostgreSQL และ SQLite (WebSQL) select 'abc' abc, 1 def; มันไม่ทำงานบน Oracle ทำไมเราต้องเลือกจาก DUAL ใน Oracle มาตรฐาน ISO / ANSI สำหรับ SQL ต้องการข้อ FROM สำหรับคำสั่งSELECTหรือไม่? แก้ไข: ตามBacon Bitคำตอบของมันดูเหมือนจะต้องการโดยมาตรฐาน SQL ดังนั้นในความเป็นจริงเพราะชื่อ DUAL นั้นเป็นชื่อเรียกที่ผิดถ้าฉันจะสร้างตารางและตั้งชื่อ ATOM หรือ ONE เช่นcreate table one (atom int);.. select 'abc' abc, 1 …
15 oracle  select 

3
ส่งคืนคอลัมน์ต่อวันในช่วง
สมมติว่าฉันมีตาราง A: BookingsPerPerson Person_Id ArrivalDate DepartureDate 123456 2012-01-01 2012-01-04 213415 2012-01-02 2012-01-07 สิ่งที่ฉันต้องทำให้สำเร็จด้วยมุมมองคือ: Person_Id ArrivalDate DepartureDate Jan-01 Jan-02 Jan-03 Jan-04 Jan-05 Jan-06 Jan-07 123456 2012-01-01 2012-01-04 1 1 1 1 213415 2012-01-02 2012-01-07 1 1 1 1 1 1 ระบบนี้ใช้สำหรับกิจกรรมดังนั้นการจองโรงแรมแต่ละครั้งอาจใช้เวลาระหว่าง 1 ถึง 15 วัน แต่ไม่มากไปกว่านั้น ความคิดใด ๆ ที่จะได้รับการชื่นชมอย่างมาก

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