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

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

3
กำหนดช่วงแบบไดนามิกในมิติข้อมูล
ฉันมีปัญหาที่ฉันเผชิญทุกครั้งที่ฉันตัดสินใจที่จะสร้างคิวบ์และฉันยังไม่พบวิธีที่จะเอาชนะมันได้ ปัญหาคือวิธีการอนุญาตให้ผู้ใช้กำหนดช่วงของสิ่งต่าง ๆ โดยอัตโนมัติโดยไม่จำเป็นต้อง hardcode พวกเขาในมิติ ฉันจะอธิบายปัญหาของฉันในตัวอย่าง ฉันมีตารางชื่อลูกค้า : นี่คือข้อมูลในตาราง: ฉันต้องการแสดงข้อมูลในรูปแบบ pivot และจัดกลุ่มเงินเดือนและอายุในช่วงที่กำหนดดังนี้: ฉันเขียนสคริปต์นี้และกำหนดช่วง: SELECT [CustId] ,[CustName] ,[Age] ,[Salary] ,[SalaryRange] = case when cast(salary as float) <= 500 then '0 - 500' when cast(salary as float) between 501 and 1000 then '501 - 1000' when cast(salary as float) between 1001 …

2
MySql - เปลี่ยน innodb_file_per_table สำหรับฐานข้อมูลสด
ฉันมีฐานข้อมูล MySql ขนาดใหญ่ (150GB) และตอนนี้ฉันสังเกตเห็นว่าการinnodb_file_per_tableตั้งค่าoffที่ทำให้ฐานข้อมูลทั้งหมดถูกโฮสต์ในไฟล์เดียว ( ibdata1) ฉันต้องการเปิดใช้งานinnodb_file_per_tableและให้มันแบ่งฐานข้อมูลย้อนหลังเป็นหลาย ๆ ไฟล์วิธีที่ดีที่สุดในการทำเช่นนี้คืออะไร
18 mysql  innodb  my.cnf 

5
MySQL นั้นเป็นโมฆะ / ไม่เป็นโมฆะ?
โปรดดูตารางนี้: mysql> desc s_p; +-------------------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------------------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | s_pid | int(10) unsigned | YES | MUL | NULL | | | sm_id | int(10) …
18 mysql  count 

3
การทำงานอัตโนมัติล้มเหลวใน PostgreSQL 9.1
วิธีหนึ่งทำการติดตั้งสองเซิร์ฟเวอร์ที่เหมือนกันสำหรับการเฟลโอเวอร์อัตโนมัติใน PostgreSQL 9.1 ระบบปฏิบัติการ Centos 5 PostgreSQL 9.1 รวบรวมจากแหล่งข้อมูล บัญชีผู้ใช้ postgres มีอยู่ในเครื่องทั้งสองเครื่องและมีรหัสผ่าน ssh ที่ไม่มีรหัสผ่านเพื่อเชื่อมต่อกับทั้งสองเครื่อง การตั้งค่าปัจจุบันของฉัน: การกำหนดค่าเซิร์ฟเวอร์หลัก: postgresql.conf: listen_address = '*' wal_level = hot_standby max_wal_senders = 3 checkpoint_segments = 16 wal_keep_segments = 8 archive_mode = on archive_command = 'cp "%p" /opt/pgsql91/archive/"%f"' pg_hba.conf: host replication all 10.0.66.1/32 trust host replication all 10.0.66.2/32 …

3
ความหมายของ 'SET' ในข้อความแสดงข้อผิดพลาด 'ค่า Null ถูกลบโดยการรวมหรือการดำเนินการ SET อื่น ๆ '
ฉันเห็นข้อความ 'คำเตือน ANSI' ข้างต้นวันนี้เมื่อเรียกใช้สคริปต์ของเพื่อนร่วมงาน (และฉันไม่ทราบว่าคำสั่งใดในหลาย ๆ คำที่ทำให้คำเตือนปรากฏขึ้น) ในอดีตที่ผ่านมาฉันไม่สนใจ: ฉันหลีกเลี่ยงโมฆะตัวเองและดังนั้นสิ่งที่จะกำจัดพวกเขาเป็นสิ่งที่ดีในหนังสือของฉัน! อย่างไรก็ตามวันนี้คำว่า 'SET' ตะโกนออกมาอย่างแท้จริงและฉันก็รู้ว่าฉันไม่รู้ความหมายของคำว่าควรจะอยู่ในบริบทนี้ ความคิดแรกของฉันขึ้นอยู่กับความจริงมันเป็นตัวพิมพ์ใหญ่คือมันหมายถึงSETคำหลักและหมายถึง 'การมอบหมาย' ใน UPDATE <table> SET ... ...ON DELETE SET NULL... SET IDENTITY_INSERT <table> ON ตามความช่วยเหลือของเซิร์ฟเวอร์ SQL คุณลักษณะ 'คำเตือนของ ANSI' จะขึ้นอยู่กับ ISO / ANSI SQL-92 ข้อมูลจำเพาะที่ใช้คำว่า 'ตั้งค่าการดำเนินงาน' เพียงครั้งเดียวในหัวข้อย่อยดังนั้นในกรณีหัวเรื่องใน ส่วนการกำหนดข้อมูล อย่างไรก็ตามหลังจาก Googling อย่างรวดเร็วของข้อความแสดงข้อผิดพลาดฉันเห็นตัวอย่างที่เป็นSELECTแบบสอบถามที่ดูเหมือนจะไม่มีการมอบหมายที่เกี่ยวข้อง ความคิดที่สองของฉันซึ่งขึ้นอยู่กับถ้อยคำของคำเตือน SQL Server คือความหมายทางคณิตศาสตร์ของชุดนั้นเป็นนัย อย่างไรก็ตามฉันไม่คิดว่าการรวมใน SQL …
18 sql-server 

2
ทำไมฉันไม่สามารถใช้ NEWSEQUENTIALID () เป็นค่าเริ่มต้นสำหรับคอลัมน์ของฉันได้
ฉันกำลังพยายามสร้างตารางใน Management Studio และหลังจากอ่านเกี่ยวกับNEWSEQUENTIALID()ฟังก์ชั่นใหม่ (จาก SQL 2005 เป็นต้นไป) คิดว่าฉันจะเลิกใช้แล้ว นี่คือสิ่งที่ฉันทำ: แต่มันไม่ให้ฉัน ข้อความแสดงข้อผิดพลาดที่ฉันได้รับคือ: 'FormTemplate (Forms)' table - Error validating the default for column 'FormTemplateId'. ฉันไม่มีเคล็ดลับที่นี่หรือไม่ ฉันใช้ SQL Server 2008 R2 แน่นอน

4
หน่วยความจำสูงสุดของเซิร์ฟเวอร์ SQL ไม่ จำกัด การใช้ RAM
ฉันต้องการให้คุณป้อนข้อมูลนี้ ฉันมี sql server 2008r2 Ent เอ็ด 64 บิตพร้อม 16 คอร์และ RAM 64GB มีอินสแตนซ์หนึ่งของเซิร์ฟเวอร์ SQL ที่ได้รับการแพตช์อย่างสมบูรณ์ตั้งแต่ 20111014 หน่วยความจำสูงสุดถูกตั้งไว้ที่ 60000MB จำนวน ram ฟรี 0 ตามตัวจัดการงานหลังจากสองสามวันออนไลน์ ถ้าฉันเปลี่ยน ram สูงสุดเป็นต่ำกว่า 53GB มันจะหลังจากนั้นสองสามวันเพื่อทำให้เสถียรและมี ram ฟรี เป็นกระบวนการ sql ที่จัดสรร ram ตามตัวจัดการงาน ฉันจะตกลงกับสิ่งที่เป็นปัญหาได้อย่างไร? มันไปโดยไม่บอกว่าฉันทำการทดสอบจำนวนมากแล้ว แต่ก็ยังไม่ได้แก้ไขสิ่งนี้ตามความชอบของฉัน และโอ้เราไม่ได้รับความอดอยากของหน่วยความจำทั่วไปเมื่อ ram ที่มีอยู่ลดลงเหลือ 0 อัปเดต 1: แรงบันดาลใจจากอีก Q / เกี่ยวข้องกับแรมในหน้านี้/dba//a/7062/2744 ฉันใช้สองสิ่งนี้เพื่อดูว่า …

3
มีจุดใดบ้างในการลดขนาดคอลัมน์ VARCHAR?
Googling แถว ๆนั้นดูเหมือนว่าจะมีการรายงานแบบผสมไม่ว่าขนาดของVARCHAR2คอลัมน์ใน Oracle จะส่งผลกระทบต่อประสิทธิภาพหรือไม่ ฉันต้องการที่จะให้คำถามVARCHARขนาดบิดเล็กน้อยและหวังว่าจะได้รับข้อมูลเชิงลึกในนี้: ที่กำหนด (หลาย) สาขาข้อความอิสระ ( ไม่ได้สิ่งที่สั้น ๆ เช่นชื่อ) ที่คุณต้องการในการจัดเก็บใน (Oracle) ฐานข้อมูลจะมีจุดใด (WRT. ประสิทธิภาพหรืออื่น ๆ ) ในไม่ maxing ออกVARCHARความจุ ( VARCHAR2(4000)ใน Oracle) แต่เลือก ค่าที่น้อยกว่าเช่น 1024 หรือ 512 เพราะนั่นน่าจะเพียงพอใน 98% ของคดีอยู่แล้ว

2
ทริกเกอร์: ย้ายแถวที่ถูกลบไปยังตารางเก็บถาวร
ฉันมีตารางเล็ก ๆ (~ 10 แถว) ที่เรียกว่าrestrictionsในฐานข้อมูล PostgreSQL ของฉันซึ่งค่าจะถูกลบและแทรกทุกวัน ฉันต้องการเรียกตารางrestrictions_deletedที่ซึ่งทุกแถวที่ถูกลบrestrictionsจะถูกเก็บไว้โดยอัตโนมัติ เนื่องจากrestrictionsมีรหัสซีเรียลจะไม่มีการทำซ้ำ ฉันจะเขียนทริกเกอร์ใน PostgreSQL ได้อย่างไร

4
ฉันจะยกเลิกการโหลดตารางฐานข้อมูล Oracle เป็นไฟล์ csv ได้อย่างไร
ฉันต้องการดึงข้อมูลบางอย่างจากฐานข้อมูล Oracle 11g รีลีส 1 และจัดให้เป็นไฟล์ CSV ตั้งแต่หนึ่งไฟล์ขึ้นไป ข้อมูลอยู่ในหลายตารางและ / หรือมุมมอง ทั้งหมดนี้ควรทำงานผ่านบรรทัดคำสั่ง อะไรจะเป็นวิธีที่ดีที่สุดในการทำสิ่งนี้?

2
ฉันจะประกาศและใช้ตัวแปรใน Oracle ได้อย่างไร
ทักษะหลักของฉันอยู่กับ SQL Server แต่ฉันถูกขอให้ทำการปรับแต่งแบบสอบถามของ Oracle ฉันได้เขียน SQL ต่อไปนี้: declare @startDate int select @startDate = 20110501 และฉันได้รับข้อผิดพลาดนี้: declare @startDate int select @startDate = 20110501 Error at line 1 ORA-06550: line 1, column 9: PLS-00103: Encountered the symbol "@" when expecting one of the following: begin function package pragma procedure subtype type …

3
จะเก็บบันทึกเว็บเซิร์ฟเวอร์ 'วัน' ใน SQL Server ได้อย่างไร
สำหรับการรายงานที่รวดเร็วขึ้นและการวิเคราะห์ประสิทธิภาพเราต้องการแทรกบันทึกการใช้เว็บเซิร์ฟเวอร์ลงใน SQL Server สิ่งนี้จะช่วยให้เราเห็นรูปแบบการจราจรปัญหาการชะลอตัวในเวลาใกล้เคียงแบบเรียลไทม์ เรามีดีมอนที่รับฟังกิจกรรมการร้องขอ / ตอบสนองจาก load balancer และแทรกจำนวนมากของเราในฐานข้อมูล อย่างไรก็ตามเราได้รับบันทึกประมาณ 1 GB ต่อวันและเราต้องเก็บประมาณหนึ่งสัปดาห์ (อย่างน้อยในรูปแบบดิบนี้) วิธีที่ดีที่สุดในการจัดเก็บข้อมูลนี้และวิธีที่ดีที่สุดในการลบรายการเก่าคืออะไร? เราได้พูดคุยเกี่ยวกับการจัดเก็บข้อมูลของแต่ละวันในตารางของตัวเองเช่นLog_2011_04_07จะมีรายการทั้งหมดสำหรับวันนั้นแล้ววางตารางที่เก่าที่สุด สามารถสร้างมุมมองเพื่อขยายตารางวันทั้งหมดเพื่อให้ง่ายต่อการสืบค้น เป็นไปได้หรือไม่

3
เหตุใดพื้นที่ข้อมูลของตารางจึงอาจมีขนาดเท่ากับข้อมูลดิบถึง 4x
ฉันมีตารางที่มีแถว 490 M และพื้นที่ตาราง 55 GB ดังนั้นประมาณ 167 ไบต์ต่อแถว ตารางมีสามคอลัมน์: กVARCHAR(100)เป็นและDATETIME2(0) SMALLINTความยาวเฉลี่ยของข้อความในVARCHARฟิลด์คือประมาณ 21.5 ดังนั้นข้อมูลดิบควรอยู่ที่ประมาณ 32 ไบต์ต่อแถว: 22 + 2 สำหรับVARCHAR, 6 สำหรับDATETIME2, และ 2 สำหรับจำนวนเต็ม 16 บิต โปรดทราบว่าพื้นที่ด้านบนเป็นข้อมูลเท่านั้นไม่ใช่ดัชนี ฉันใช้ค่ารายงานภายใต้คุณสมบัติ | จัดเก็บข้อมูล | ทั่วไป | พื้นที่ข้อมูล แน่นอนว่าต้องมีค่าใช้จ่ายอยู่บ้างแต่ดูเหมือนว่า 135 ไบต์ต่อแถวดูเหมือนจะเยอะมากโดยเฉพาะกับโต๊ะตัวใหญ่ เหตุใดจึงเป็นเช่นนี้ มีคนอื่นเห็นตัวคูณที่เหมือนกันหรือไม่ ปัจจัยใดที่สามารถส่งผลต่อปริมาณพื้นที่เพิ่มเติมที่ต้องการ สำหรับการเปรียบเทียบฉันพยายามสร้างตารางที่มีสองINTฟิลด์และ 1 M แถว พื้นที่ข้อมูลที่ต้องการคือ 16.4 MB: 17 ไบต์ต่อแถวเมื่อเปรียบเทียบกับข้อมูลดิบ …

2
เราสามารถทำอะไรใน MySQL 5.0 Replication เพื่อจัดการกับปัญหาแบนด์วิดท์?
ฉันกำลังพัฒนาแอพพลิเคชั่นให้ทำงานบนไคลเอนต์พีซี (Win) ซึ่งได้รับการกำหนดค่าด้วยอินสแตนซ์ของเซิร์ฟเวอร์ MySQL 5.1 ที่จะทำหน้าที่เป็นสลาฟแบบอ่านอย่างเดียวไปยังต้นแบบระยะไกล ต้นแบบระยะไกลมีสกีมาหลายสิบ แต่ฉันต้องการเพียงหนึ่งต่อไคลเอนต์ดังนั้นฉันให้การตั้งค่าการจำลองแบบ - do-dbใน my.ini เพื่อทำซ้ำสคีมาที่ลูกค้าต้องการเท่านั้น การจำลองแบบใช้งานได้ แต่เมื่อลูกค้าของเราเข้าสู่ภูมิภาคต่างๆของโลกที่มีการเข้าถึงอินเทอร์เน็ตผ่านเครือข่ายไร้สาย 3G เท่านั้นซึ่งเรียกเก็บตามการใช้ข้อมูลลูกค้าจะเกินขีด จำกัด แผนข้อมูลของพวกเขาอย่างรวดเร็วและประสบปัญหาราคาแพง ดังที่ฉันเข้าใจแล้ว MySQL จะเขียนธุรกรรมทั้งหมดสำหรับสกีมาทั้งหมดลงในไฟล์ binlog ไฟล์เดียวซึ่งหมายความว่าไคลเอนต์แต่ละคนจะต้องดาวน์โหลดธุรกรรมทั้งหมดที่ดำเนินการกับทุกสกีมาบนมาสเตอร์แล้วดาวน์โหลดเมื่อใช้ตัวกรองฐานข้อมูลต่อการจำลองแบบการตั้งค่าdo-dbในไฟล์ my.ini ของลูกค้า เพื่อลดความไร้ประสิทธิภาพนี้ฉันได้ใช้การตั้งค่าslave_compressed_protocol = 1ซึ่งดูเหมือนว่าจะลดข้อมูลที่ส่งลง 50% แต่ก็ยังทำให้ลูกค้าของเราเกินขีด จำกัด ข้อมูลที่รวดเร็วขึ้นในบิล 3G ฉันไม่สามารถจินตนาการได้ว่าฉันเป็นเพียงคนเดียวที่พบสิ่งนี้ดังนั้นฉันแน่ใจว่าฉันจะได้รับคำตอบมากมายเกี่ยวกับวิธีการบรรลุเป้าหมายนี้โดยการตั้งค่า x = y อย่างไรก็ตามฉันไม่พบเอกสารของการตั้งค่าดังกล่าวหรือวิธีการที่แนะนำให้ใช้ จนถึงตอนนี้นี่เป็นความคิดของฉันในการแก้ปัญหาที่เป็นไปได้โปรดให้ข้อเสนอแนะหรือเส้นทางอื่น: ตั้งค่าทาส "พร็อกซี" สำหรับแต่ละสคีมา (ในกล่องอื่นหรือกล่องเดียวกันกับอินสแตนซ์ / พอร์ต MySQL อื่น) กำหนดค่าพร็อกซี slave เพื่อทำซ้ำ-do-db …

3
ทำไมบางคนใส่ `ที่ 1 = 1` ในแบบสอบถาม
where 1 = 1ฉันมาข้ามมุมมองในฐานข้อมูลของเราวันนี้ที่คำสั่งแรกในข้อที่เป็น สิ่งนี้ไม่ควรกลับมาเป็นจริงสำหรับทุกระเบียนหรือไม่ ทำไมบางคนจะเขียนสิ่งนี้หากไม่ได้กรองระเบียนใด ๆ

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