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

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

4
Do SSD ช่วยลดประโยชน์ของฐานข้อมูล
ฉันเพิ่งได้ยินเกี่ยวกับ Robert Martin วันนี้และดูเหมือนว่าเขาเป็นบุคคลสำคัญในโลกซอฟต์แวร์ดังนั้นฉันไม่ได้ตั้งใจให้ชื่อของฉันปรากฏราวกับว่ามันเป็นเหยื่อคลิกหรือฉันใส่คำเข้าไปในปากของเขา ฉันตีความสิ่งที่ฉันได้ยินจากเขาด้วยประสบการณ์และความเข้าใจที่ จำกัด ของฉันได้อย่างไร ฉันกำลังดูวิดีโอวันนี้ (ในสถาปัตยกรรมซอฟต์แวร์) จากการพูดคุยของ Robert C. Martin และในช่วงครึ่งหลังของวิดีโอหัวข้อของฐานข้อมูลเป็นจุดสนใจหลัก จากความเข้าใจในสิ่งที่เขาพูดดูเหมือนว่าเขาจะบอกว่า SSD นั้นจะลดประโยชน์ของฐานข้อมูล ( อย่างมาก ) เพื่ออธิบายวิธีที่ฉันมาถึงการตีความนี้: เขากล่าวถึงวิธีที่มี HDDs / ดิสก์หมุนการดึงข้อมูลช้า อย่างไรก็ตามทุกวันนี้เราใช้ SSD เขาตั้งข้อสังเกต เขาเริ่มต้นด้วย "RAM กำลังมา" จากนั้นดำเนินการต่อโดยการกล่าวถึงดิสก์ RAM แต่แล้วก็บอกว่าเขาไม่สามารถเรียกมันว่าดิสก์ RAM ได้ดังนั้นจึงต้องบอกว่า RAM ดังนั้นสำหรับ RAM เราไม่ต้องการดัชนีเพราะทุกไบต์ต้องใช้เวลาเท่ากันในการรับ ( ย่อหน้านี้ถอดความจากฉัน ) ดังนั้นเขาแนะนำ RAM (เหมือนในหน่วยความจำคอมพิวเตอร์) แทน DBs (นั่นคือสิ่งที่ฉันตีความคำแถลงของเขาในฐานะ) ไม่สมเหตุสมผลเพราะมันเหมือนกับการบอกว่าระเบียนทั้งหมดเป็นหน่วยความจำในการประมวลผลตลอดอายุการใช้งานของแอปพลิเคชัน …

1
ตัวดำเนินการสปูลกระตือรือร้นมีประโยชน์สำหรับการลบนี้จากคอลัมน์ในคลัสเตอร์หรือไม่
ฉันกำลังทดสอบการลบข้อมูลจากดัชนี columnstore แบบคลัสเตอร์ ฉันสังเกตเห็นว่ามีตัวดำเนินการเก็บพักขนาดใหญ่ที่กระตือรือร้นในแผนการดำเนินการ: สิ่งนี้เสร็จสมบูรณ์ด้วยคุณสมบัติดังต่อไปนี้: ลบ 60 ล้านแถว 1.9 GiB TempDB ใช้แล้ว เวลาดำเนินการ 14 นาที แผนอนุกรม 1 rebind บนสปูล ค่าใช้จ่ายโดยประมาณสำหรับการสแกน: 364.821 หากฉันหลอกผู้ประมาณค่าให้ดูถูกดูแคลนฉันจะได้รับแผนการที่เร็วกว่าและหลีกเลี่ยงการใช้ TempDB: ค่าใช้จ่ายโดยประมาณของการสแกน: 56.901 (นี่เป็นแผนโดยประมาณ แต่ตัวเลขในความคิดเห็นถูกต้อง) ที่น่าสนใจที่เก็บพักหายไปอีกครั้งถ้าฉันล้างร้านค้าเดลต้าโดยเรียกใช้ต่อไปนี้: ALTER INDEX IX_Clustered ON Fact.RecordedMetricsDetail REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON); สปูลจะปรากฏขึ้นเฉพาะเมื่อมีจำนวนหน้ามากกว่าเกณฑ์ในร้านเดลต้า หากต้องการตรวจสอบขนาดของร้านค้าเดลต้าฉันกำลังเรียกใช้คิวรีต่อไปนี้เพื่อตรวจสอบหน้าในแถวสำหรับตาราง: SELECT SUM([in_row_used_page_count]) AS in_row_used_pages, SUM(in_row_data_page_count) AS in_row_data_pages FROM sys.[dm_db_partition_stats] as …

2
เหตุใด SELECT จึงเป็นขนาดเร็วกว่า SELECT foo
พิจารณาตารางค่าและแฮชเช่น: +------------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+----------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | val | char(9) | NO | | NULL | | | val_hashed | char(50) | YES | | NULL | …

1
sys.stats_columns ไม่ถูกต้องหรือไม่
สมมติว่าผมมีตารางFooที่มีคอลัมน์และคีย์หลักคอมโพสิตที่กำหนดไว้มากกว่าID1, ID2 ID2, ID1(ขณะนี้ฉันกำลังทำงานกับผลิตภัณฑ์ System Center ซึ่งมีหลายตารางที่กำหนดด้วยวิธีนี้กับคอลัมน์คีย์หลักที่แสดงรายการตามลำดับที่ตรงกันข้ามจะปรากฏในคำจำกัดความของตาราง) CREATE TABLE dbo.Foo( ID1 int NOT NULL, ID2 int NOT NULL, CONSTRAINT [PK_Foo] PRIMARY KEY CLUSTERED (ID2, ID1) ); GO -- Add a row and update stats so that histogram isn't empty INSERT INTO Foo (ID1, ID2) VALUES (1,2); UPDATE STATISTICS dbo.Foo; key_ordinalคอลัมน์ในsys.index_columnsการแสดงคอลัมน์ดัชนีในลำดับเดียวกันพวกเขาถูกประกาศในคีย์หลักคอมโพสิต: …

2
วิธีจัดการกับแผนแบบสอบถามที่ไม่ดีที่เกิดจากความเท่าเทียมกันที่แน่นอนในประเภทช่วง?
ฉันกำลังอัปเดตโดยที่ฉันต้องการความเท่าเทียมกันแน่นอนในtstzrangeตัวแปร แถว ~ 1M มีการแก้ไขและแบบสอบถามใช้เวลาประมาณ 13 นาที ผลลัพธ์ของEXPLAIN ANALYZEสามารถเห็นได้ที่นี่และผลลัพธ์ที่แท้จริงแตกต่างอย่างมากจากที่ประเมินโดยผู้วางแผนแบบสอบถาม ปัญหาคือการสแกนดัชนีt_rangeคาดว่าจะส่งคืนแถวเดียว สิ่งนี้น่าจะเกี่ยวข้องกับความจริงที่ว่าสถิติของประเภทช่วงนั้นถูกจัดเก็บแตกต่างจากประเภทอื่น ๆ มองไปที่pg_statsมุมมองสำหรับคอลัมน์ที่n_distinctเป็น -1 และสาขาอื่น ๆ (เช่นmost_common_vals, most_common_freqs) เป็นที่ว่างเปล่า อย่างไรก็ตามจะต้องมีสถิติเก็บไว้ในt_rangeบางแห่ง การอัปเดตที่คล้ายกันอย่างยิ่งซึ่งฉันใช้ 'ภายใน' บน t_range แทนที่จะใช้ความเท่าเทียมกันที่แน่นอนใช้เวลาประมาณ 4 นาทีในการดำเนินการและใช้แผนคิวรีที่แตกต่างกันอย่างมาก (ดูที่นี่ ) แผนคิวรีที่สองนั้นสมเหตุสมผลสำหรับฉันเพราะทุกแถวในตาราง temp และส่วนสำคัญของตารางประวัติจะถูกนำมาใช้ t_rangeที่สำคัญกว่าการวางแผนแบบสอบถามคาดการณ์ตัวเลขให้ถูกต้องประมาณแถวสำหรับกรอง การกระจายตัวของt_rangeมันค่อนข้างผิดปกติ ฉันใช้ตารางนี้เพื่อเก็บสถานะทางประวัติศาสตร์ของตารางอื่นและการเปลี่ยนแปลงของตารางอื่น ๆ เกิดขึ้นพร้อมกันในการทิ้งขนาดใหญ่ดังนั้นจึงมีค่าที่แตกต่างกันไม่มากt_rangeนัก นี่คือการนับที่สอดคล้องกับค่าที่ไม่ซ้ำกันของt_range: t_range | count -------------------------------------------------------------------+--------- ["2014-06-12 20:58:21.447478+00","2014-06-27 07:00:00+00") | 994676 ["2014-06-12 20:58:21.447478+00","2014-08-01 01:22:14.621887+00") …

3
ทำไม query_cache_type ถูกปิดใช้งานโดยค่าเริ่มต้นเริ่มต้นจาก MySQL 5.6?
เราได้อัพเกรดเป็น MySQL 5.6 และเริ่มเห็นว่าการโหลดเซิร์ฟเวอร์ db เพิ่มขึ้นอย่างมากและในที่สุดก็พบว่าค่า query_cache_typeเริ่มต้นคือ off จากเริ่มต้นที่ 5.6 เราเปิดใช้งานอีกครั้งและดูการลดลงของการโหลดทำไมค่านี้จึงถูกปิดการใช้งานโดยเริ่มต้นจาก MySQL 5.6? ฉันไม่เห็นปัญหาในการเปิดใช้งาน

4
ตรวจสอบว่าสองตารางมีเนื้อหาเหมือนกันใน PostgreSQL
สิ่งนี้ถูกถามใน Stack Overflowแล้ว แต่สำหรับ MySQL เท่านั้น ฉันใช้ PostgreSQL แต่น่าเสียดายที่ (และน่าแปลกใจ) PostgreSQL CHECKSUM tableไม่ได้ดูเหมือนจะมีบางอย่างเช่น วิธีการแก้ปัญหา PostgreSQL นั้นใช้ได้ผล แต่วิธีทั่วไปจะดีกว่า ฉันพบhttp://www.besttechtools.com/articles/article/sql-query-to-check-two-tables-have-identical-dataแต่ฉันไม่เข้าใจตรรกะที่ใช้ ความเป็นมา: ฉันเขียนรหัสการสร้างฐานข้อมูลใหม่ดังนั้นฉันต้องตรวจสอบว่ารหัสเก่าและใหม่ให้ผลลัพธ์ที่เหมือนกันหรือไม่

2
สร้างดัชนีเทียบกับแก้ไขตารางเพิ่มดัชนี - MySQLism หรือ SQL Standard?
เพิ่งเจอปัญหาแปลก ๆ โดยขึ้นอยู่กับว่าฉันจะสร้างดัชนีได้อย่างไรจำเป็นต้องใช้ชื่อดัชนี http://dev.mysql.com/doc/refman/5.5/en/create-index.html http://dev.mysql.com/doc/refman/5.5/en/alter-table.html CREATE INDEX `random_name` ON `my_table` (`my_column`); # Requires an index name ALTER TABLE `my_table` ADD INDEX (`my_column`); # Does not require an index name สำหรับฉันแล้วดูเหมือนว่าการเรียก CREATE INDEX ไม่ควรใช้ชื่อดัชนี ฉันสงสัยว่านี่เป็น MySQLism หรือมาตรฐาน SQL ใช่หรือไม่

2
กระบวนการบล็อกว่างเปล่าในรายงานกระบวนการที่ถูกบล็อก
ฉันรวบรวมรายงานกระบวนการที่ถูกบล็อกโดยใช้เหตุการณ์เพิ่มเติมและด้วยเหตุผลบางประการในรายงานบางอันblocking-processโหนดนั้นว่างเปล่า นี่คือ xml แบบเต็ม: <blocked-process-report monitorLoop="383674"> <blocked-process> <process id="processa7bd5b868" taskpriority="0" logused="106108620" waitresource="KEY: 6:72057613454278656 (8a2f7bc2cd41)" waittime="25343" ownerId="1051989016" transactionname="user_transaction" lasttranstarted="2017-03-20T09:30:38.657" XDES="0x21f382d9c8" lockMode="X" schedulerid="7" kpid="15316" status="suspended" spid="252" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2017-03-20T09:39:15.853" lastbatchcompleted="2017-03-20T09:39:15.850" lastattention="1900-01-01T00:00:00.850" clientapp="Microsoft Dynamics AX" hostname="***" hostpid="1348" loginname="***" isolationlevel="read committed (2)" xactid="1051989016" currentdb="6" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056"> <executionStack> <frame line="1" stmtstart="40" sqlhandle="0x02000000f7def225b0edaecd8744b453ce09bdcff9b291f50000000000000000000000000000000000000000" …

3
เลือกแถวที่คอลัมน์มีข้อมูลเดียวกันในบันทึกมากกว่าหนึ่งรายการ
article_titleผมมีตารางที่มีคอลัมน์ที่เรียกว่า articlesสมมติว่าชื่อตารางเป็น ฉันต้องการค้นหาระเบียนที่มีarticle_titleข้อมูลเหมือนกันในมากกว่าหนึ่งระเบียน นี่คือสิ่งที่ฉันได้รับ: select a.* from articles a where a.article_title = (select article_title from articles where article_title = a.article_title AND a.id <> articles.id)

1
แปลงระเบียนคอลัมน์ทั้งหมดเป็นตัวพิมพ์เล็ก
ฉันใช้ PostgreSQL 9.1 และฉันมีตารางผู้ใช้ที่มีloginคอลัมน์ ชื่อล็อกอินเป็นกรณี ๆ ไปเช่น Bob, MikE, john ฉันต้องการแปลงระเบียนทั้งหมดเหล่านี้เป็นตัวพิมพ์เล็ก ฉันจะทำสิ่งนั้นได้อย่างไร

2
ทำไม SQL Server จำเป็นต้องใช้ความยาวประเภทข้อมูลเหมือนกันเมื่อใช้ UNPIVOT
เมื่อใช้UNPIVOTฟังก์ชันกับข้อมูลที่ไม่ได้ทำให้เป็นมาตรฐาน SQL Server ต้องการให้ประเภทข้อมูลและความยาวเหมือนกัน ฉันเข้าใจว่าทำไมประเภทข้อมูลต้องเหมือนกัน แต่ทำไม UNPIVOT จึงต้องมีความยาวเท่ากัน สมมติว่าฉันมีข้อมูลตัวอย่างต่อไปนี้ที่ฉันต้องการยกเลิกการหมุน: CREATE TABLE People ( PersonId int, Firstname varchar(50), Lastname varchar(25) ) INSERT INTO People VALUES (1, 'Jim', 'Smith'); INSERT INTO People VALUES (2, 'Jane', 'Jones'); INSERT INTO People VALUES (3, 'Bob', 'Unicorn'); หากฉันพยายาม UNPIVOT FirstnameและLastnameคอลัมน์คล้ายกับ: select PersonId, ColumnName, Value from People …

9
วิธีที่มีประสิทธิภาพที่สุดในการทดสอบ FIZZBUZZ ใน SQL Server คืออะไร
นี่อาจไม่สมบูรณ์ในหัวข้อ แต่มันเป็นวันที่ช้าที่นี่ มีวิธีที่มีประสิทธิภาพมากขึ้นในการรับรายการตัวเลขจาก 1 ถึง 49 ด้วยคอลัมน์ที่มีคำหรือไม่FIZZเมื่อจำนวนสามารถหารด้วย 3 ได้อย่างเท่าเทียมกันBUZZเมื่อจำนวนสามารถหารด้วย 5 ได้อย่างเท่าเทียมกันและFIZZBUZZเมื่อจำนวนสามารถแบ่งเท่า ๆ กัน โดยทั้ง 3 และ 5? ความพยายามของฉันคือ (ข้อควรระวังนี่จะทำให้แคชกระบวนการของคุณว่างเปล่าดังนั้นอย่าเรียกใช้บนกล่องการผลิต): DBCC FREEPROCCACHE GO /*VARIANT1*/ ;WITH t AS ( SELECT RowNum = ROW_NUMBER() OVER (ORDER BY o.object_id) FROM sys.objects o ) SELECT t.RowNum , CASE WHEN ((t.RowNum % 3) + (t.RowNum % …
28 sql-server 

8
วิธีสอบถามฐานข้อมูลสำหรับตารางว่าง
เนื่องจาก 'นักพัฒนา' บางคนเราทำงานกับระบบของเราเรามีปัญหากับตารางที่ว่างเปล่า เราพบว่าระหว่างการถ่ายโอนไปยังคลาวด์มีการคัดลอกหลายตาราง แต่ข้อมูลในนั้นไม่ได้ ฉันต้องการเรียกใช้แบบสอบถามตารางระบบเพื่อค้นหาว่าตารางผู้ใช้ว่างเปล่า เรากำลังใช้ MS SQL 2008 R2 ขอบคุณสำหรับความช่วยเหลือ

5
วิธีฆ่า MySQL อย่างถูกต้อง?
ฉันมี CentOS 64 บิตพร้อมติดตั้ง CPanel และฉันใช้: service mysql stop มันแค่ทำให้ช่วงเวลาฟ้องร้องและดูเหมือนว่ามันจะไม่หยุด ในบันทึกมันเพิ่งโพสต์เป็นจำนวนมาก: 130303 17:42:38 [Warning] /usr/sbin/mysqld: Forcing close of thread ในerr.logไฟล์ฉันเห็นสิ่งเหล่านี้มากมาย: [Warning] /usr/sbin/mysqld: Forcing close of thread มันเคยเป็นแบบทันที ความคิดใด ๆ ว่าทำไมถึงเป็นเช่นนั้นและจะแก้ไขอย่างไร ตอนนี้ฉันต้องทำkillall -9 mysqlแต่จะมีวิธีที่ดีกว่า เซิร์ฟเวอร์ใช้งานได้ดีมาก นี่เป็นปัญหาการกำหนดค่าหรือไม่ ฉันมีการตั้งค่า memroy สูงเกินไปหรือไม่ [mysqld] default-storage-engine=MyISAM local-infile=0 symbolic-links=0 skip-networking max_connections = 500 max_user_connections = 20 key_buffer …

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