数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

1
查看最后几个innodb僵局
我看到可以在mysql / innodb中查看最新的死锁,但是有没有办法查看过去的死锁?我们有两个僵局问题,一个很重要,另一个不重要。不太重要的死锁每天发生几次,因此它成为“最新的”死锁。


1
针对大量插入和bytea更新优化PostgreSQL
我们拥有(软件​​): 具有基本配置的PostrgeSQL 9.3(中没有更改postgresql.conf) Windows 7 64位 硬件: 英特尔酷睿i7-3770 3.9 GHz 32 Gb RAM WDC WD10EZRX-00L4HBAta驱动器(1000Gb,SATA III) 因此,我们必须加载到数据库aprox中。100.000.000行(带bytea列),以及更简单的500.000.000行(无LOB)。varchar在第一个表上有2个索引(长度为13、19),varchar在第二个表上有2 个索引(长度为18,10)。每个表还具有用于ID生成的序列。 到目前为止,这些操作是使用8个连接进行的,并具有5​​0个JDBC批处理大小。下图演示了系统负载:postgresql进程的负载为零。加载24小时后,我们仅加载了1000万行,这是非常缓慢的结果。 我们正在寻求有关调整PostrgreSQL配置的帮助,以实现以下目的: 1)为了超快地加载此数据量,这是一次操作,因此可以是临时配置 2)对于生产模式,通过它们的索引对这2个表进行适量的SELECT,而无需联接和排序。

2
SQL连接查询以显示一个表中不存在行的行
我正在尝试完成一些有关员工时间记录的报告。 我们有两个专门针对此问题的表格。Members表中列出了员工,他们每天输入他们已执行的工作的时间条目并将其存储在Time_Entry表中。 使用SQL Fiddle进行设置的示例:http ://sqlfiddle.com/#!3/e3806/7 最终的结果我要的是一个表,表示所有的Members列中的列表,然后将展示他们的总和小时,在其他列查询的日期。 问题似乎是,如果Time_Entry表中没有特定成员的行,那么该成员现在将有一行。我尝试了几种不同的联接类型(左,右,内部,外部,完全外部等),但似乎没有一种能满足我的要求(基于SQL Fiddle的最后一个示例): /*** Desired End Result ***/ Member_ID | COUNTTime_Entry | TIMEENTRYDATE | SUMHOURS_ACTUAL | SUMHOURS_BILL ADavis | 0 | 11-10-2013 | 0 | 0 BTronton | 0 | 11-10-2013 | 0 | 0 CJones | 0 | 11-10-2013 | 0 | 0 DSmith …

8
如何编写查询以查找数据库中具有特定列名的所有表
我有一个包含约100个表的数据库,我需要建立一个联接查询以从其中两个表中获取特定数据。我知道一个,但另一个不知道。基本上我需要这样的东西: select <tables> from <database> where exists table.column name; 我怎样才能做到这一点?
12 metadata 

4
为什么使用显式游标而不是常规循环?
我已经编写了一年的基本Web应用程序(针对Oracle数据库),并且由于功能非常简单,因此我们大多数人坚持使用常规的FOR循环来获取数据: for i in (select * from STUDENTS) loop htp.prn(i.student_last_name || ', ' || i.student_first_name || ' ' || i.student_dob); end loop; 但是,游标似乎是做事的“正确”方法。我可以找到许多有关什么是游标以及如何遍历游标的信息,但是我找不到在常规的FOR循环上使用游标的确凿的理由。是否取决于程序的需求?我应该了解哪些固有优势?
12 oracle  plsql 

1
PostgreSQL psql-不起作用,但没有错误[关闭]
这个问题不太可能对将来的访客有所帮助;它仅与较小的地理区域,特定的时间段或极为狭窄的情况(通常不适用于Internet的全球受众)有关。要获得使该问题更广泛适用的帮助,请访问帮助中心。 7年前关闭。 我对PostgreSQL完全陌生,所以我可能缺少一些显而易见的东西。 通过终端上的psql连接到我的本地数据库。我运行的任何要更改数据库的命令,甚至是简单的选择都无济于事。没有错误,没有结果。 我可以使用shell命令createdb,dropdb很好。 使用本地PostgreSQL数据库在Ruby on Rails的RefineryCMS中运行了一个站点,所以我知道数据库中有数据并且正在工作-我似乎无法通过psql查询或修改它。 我想念什么? Mac OS X Lion,第v v 9.2。
12 postgresql  psql 

3
索引最大行大小错误
array列有上限吗? 插入数组字段时出现此错误- PG::Error: ERROR: index row size 3480 exceeds maximum 2712 for index "ix_data" 这是我的表格定义- create table test_array(id varchar(50), data text[]); ALTER TABLE test_array ADD PRIMARY KEY (id); CREATE INDEX ix_data ON test_array USING GIN (data); 我需要在数组字段上建立索引,因为我正在对其进行一些查询。

2
复制并重命名数据库,以便我可以附加两个副本
我在服务器上有一个名为“ mysite_db”的数据库,并且在本地计算机上也创建了一个副本“ mysite_db”。我想将数据库(从本地计算机)附加到已经具有该数据库名称的服务器。这意味着我必须更改本地数据库的名称(我想我也需要更改物理文件)。我不知道该怎么做。你能指导我吗? 我的目标是在服务器上加载两个数据库,例如:“ mysite_db”和“ myNewSite_db”



1
为什么在MySQL的FULLTEXT索引上,LIKE比MATCH…AGAINST快4倍以上?
我不明白这一点。 我有一张带有这些索引的表 PRIMARY post_id INDEX topic_id FULLTEXT post_text 表具有(仅)346 000行。我正在尝试执行2个查询。 SELECT post_id FROM phpbb_posts WHERE topic_id = 144017 AND post_id != 155352 AND MATCH(post_text) AGAINST('http://rapidshare.com/files/5494794/photo.rar') 需要4.05秒,而 SELECT post_id FROM phpbb_posts WHERE topic_id=144017 AND post_id != 155352 AND post_text LIKE ('%http://rapidshare.com/files/5494794/photo.rar%') 需要0.027秒。 EXPLAIN显示唯一的区别是possible_keys(fulltext包括post_text,LIKE没有) 真的很奇怪 这背后是什么?后台发生了什么事?LIKE不使用索引时怎么能这么快,而使用FULLTEXT时却那么慢呢? UPDATE1: 实际上,现在大约需要0.5秒,也许表已锁定,但是,当我打开分析时,它表明FULLTEXT INITIALIZATION花费了0.2秒。这是怎么回事? 我LIKE每秒查询表10次​​,全文查询2次 UPDATE2: 惊喜! …

1
如何在mysql中的复合主键上进行INDEX?
当为两个或更多列创建复合主键时,例如PRIMARY KEY(col1, col2, col3);系统会分别对INDEX每一列进行吗? 我问这个问题的原因是,当我们使用时UNIQUE INDEX (col1, col2, col3),它仅充当INDEX第一列,而我们需要INDEX为其他列创建其他。我想知道复合主键是否也是如此。

1
我应该如何解释mysql慢查询日志中的“锁定时间”?
我试图了解如何最好地解释查询的锁定时间,这些查询显示在我们的MySQL慢查询日志中。 例如,如果UPDATE查询的锁定时间为10秒。我认为这是更新查询获得锁之后的总时间。即使它正在等待先前的选择查询完成但不执行UPDATE操作本身,时钟也应该滴答作响,因为它锁定了所有在UPDATE查询之后排队的SELECT查询。 以及SELECT查询锁如何。为什么某些选择查询具有锁定时间?是因为有后续的UPDATE查询,因此他们将表锁定在一起。
12 mysql  locking 

1
有关SQL Server中varchar大小调整的当前最佳实践是什么?
从存储和性能的角度来看,我试图了解确定varchar列应为多少的最佳方法。 表现 从我的研究看来只有真正需要时才应使用varchar(max);也就是说,如果该列必须容纳8000个以上的字符,那么一个原因就是缺乏索引(尽管一般而言,我对varchar字段的索引有些怀疑。尽管我对DB原理还很陌生,所以也许这是没有根据的)和压缩(更多有关存储的问题)。实际上,一般而言,当执行varchar(n).... oversizing不好时,人们似乎只建议使用所需的内容,因为查询必须考虑最大可能的大小。但也有人指出,引擎将使用指示大小的一半作为数据的平均实际大小的估计值。这意味着应该从数据中确定平均大小是多少,将其加倍,并将其用作n。但是,对于变异性非常低但非零的数据,这意味着要比最大尺寸大2倍,这似乎很多,但也许不是吗?见识将不胜感激。 存储 在阅读了行内存储与行外存储的工作原理并记住实际存储仅限于实际数据之后,在我看来,实际上,n的选择对存储几乎没有影响(除了确保它足够大以容纳所有东西)。即使使用varchar(max)也不会对存储产生任何影响。相反,如果可能的话,目标可能是将每个数据行的实际大小限制为〜8000字节。那是对事物的准确阅读吗? 上下文 我们的某些客户数据有些波动,因此,我们通常将列的宽度设置为稍稍超出其宽度(例如,将这些列增加15-20%)。我想知道是否还有其他特殊考虑?例如,与我一起工作的某人告诉我使用2 ^ n-1的大小(尽管我发现没有证据表明这是事实....) 我说的是初始表的创建。客户将告诉我们,他们将开始向我们发送一个新表,并发送示例数据(或仅发送第一个生产数据集),我们将对其进行查看并最终创建一个表来保存数据。我们希望使这张表最终能够处理将来的进口以及样品中的进口商品。但是,某些行注定会变长,因此我们填充它们。 问题是多少,是否有技术准则?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.