数据库管理员

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

2
删除带有待处理事务的MySQL表
有没有办法删除MySQL中具有待处理事务的InnoDB表或数据库(最好在文件系统级别)? 发生了什么: 我使用MySQL 5.5.28并运行LOAD DATA INFILE…将一个巨大的数据集(300M行)导入InnoDB表。我以前没用过set autocommit = 0;。不幸的是,mysqld在导入过程中被阻止了。 当我重新启动时mysql,它将尝试回滚使用以下消息填充系统日志的事务: mysqld_safe [4433]:121212 16:58:52 InnoDB:等待1个活动事务完成 问题是回滚现在已经运行了25多个小时,在此期间 mysqld不接受任何套接字连接。 我不能只是删除/var/lib/mysql/*并从头开始,因为这台机器上还有其他一些InnoDB数据库/表。但是,有问题的表是单独数据库中的唯一表。删除整个表或整个数据库不是问题,因为之后我可以重新导入所有数据。

1
使用联接时,SQL Server的订购结果如何?
SQL Server如何找出查询执行结果集中的记录顺序? 我试图做它的正面或反面,但发现自己在挠挠头。当我更改字段时,我选择的顺序也会更改。当我使用a执行以下SQL时,SELECT *我得到的记录相同,但顺序却大不相同。 SELECT TOP (900) AD.ATTACHMENTID, AD.NAME, AD.ISINLINE, AD.INSERTEDDATETIME, ATMT.ATTACHMENTBLOB, U.UFID FROM ATTACHMENTDETAIL AD WITH (NOLOCK) INNER JOIN MESSAGEATTACHMENT MA ON MA.ATTACHMENTID = AD.ATTACHMENTID INNER JOIN ATTACHMENT ATMT ON ATMT.ATTACHMENTID = AD.ATTACHMENTID INNER JOIN MESSAGE MSG ON MSG.ID = MA.MESSAGEID INNER JOIN MESSAGEDETAIL MD ON MD.MESSAGEID = MA.MESSAGEID …

3
复制失败;如何继续下去?
我在Ubuntu上运行Postgres 9.1.6,并且在主服务器和从服务器之间设置了流复制设置。一切都运行顺利,直到数据库崩溃为止,我们不得不重新启动这两个盒子。 现在,复制已停止,并且当检查两个框中的日志时,我看到以下消息: CDT FATAL:请求的WAL段0000000100000224000000FA已被删除 一遍又一遍是同一段。从我的Google搜索中,似乎复制服务器正在尝试从主服务器检索此段,但是现在不再存在。好的,但是如何解决这个问题?我是否需要进行新的备份并将其重新同步到从站?有没有一种简单的方法可以使从站恢复同步?

1
MySQL表创建异常缓慢
在我的一个MySQL数据库上创建一个简单的表需要花费很多时间: mysql> CREATE TABLE blah (id BIGINT UNSIGNED NOT NULL PRIMARY KEY); Query OK, 0 rows affected (16.58 sec) 机器很空闲: 01:21:26 PM CPU %user %nice %system %iowait %steal %idle 01:21:27 PM all 0.50 0.00 0.21 0.00 0.00 99.29 任何想法如何对此进行调查? 编辑:按照DTest的建议,这是执行配置文件: mysql> SHOW PROFILE FOR QUERY 1; +----------------------+----------+ | Status | …

1
对值为NULL的布尔值进行查询时发生意外的Seq扫描
我有一个称为auto_review列类型为的数据库列boolean。使用ActiveRecord ORM创建该字段的索引。 CREATE INDEX index_table_on_auto_renew ON table USING btree (auto_renew); 当我在字段中查询布尔值时,PG会按预期使用索引。 EXPLAIN for: SELECT "table".* FROM "table" WHERE "table"."auto_renew" = 'f' QUERY PLAN ---------------------------------------------------------------------------------------------- Bitmap Heap Scan on table (cost=51.65..826.50 rows=28039 width=186) Filter: (NOT auto_renew) -> Bitmap Index Scan on index_domains_on_auto_renew (cost=0.00..44.64 rows=2185 width=0) Index Cond: (auto_renew = false) (4 …

3
如何检查SQL Server端点的安全设置?
我正在为我们的SQL Server开发人员创建一个TEST环境。 在生产中,我们有3个SQL Server,SQL01其中包含多个镜像到的数据库SQL02。 SQL03在“具有自动故障转移功能的高安全性”或同步配置中充当见证人。 我已经使用VMWare P2V将所有三台计算机虚拟化到单独的硬件上,重新配置了计算机的SID,并从这些新计算机中清除了生产服务器的IP地址。 我起初忘记给生产见证机器加黑洞,因此​​TEST机器上的数据库仍将SQL03机器用作见证。注意到这个问题,我决定在TEST上重新配置数据库,以指向新虚拟化的TEST见证者,称之为TEST03。 要重新配置数据库以使用新的见证服务器,我在主服务器上输入了以下命令TEST01: ALTER DATABASE [TestDB] SET WITNESS = 'TCP://TEST03.domain.inet:5022'; 响应是意外的: The ALTER DATABASE command could not be sent to the remote server instance 'TCP://TEST03.domain.inet:5022'. The database mirroring configuration was not changed. Verify that the server is connected, and try again. 我对这个错误消息非常困惑,因为该配置在生产机器上确实有效,并且在测试机器上没有进行任何修改。 为了使它起作用,我需要LOGIN在测试见证人上创建一个: CREATE …

3
是否可以保证SELECT ROW_NUMBER()返回按生成的行号排序的结果?
例如考虑SQL查询: SELECT A.[Name], ROW_NUMBER() OVER(ORDER BY A.[Name] ASC) FROM [FooTable] AS A 在这里,我观察到返回的结果按A. [名称]排序。如果我将ROW_NUMBER函数中定义的排序列更改为另一列,那么结果将再次由该列进行排序。 我期望将行号分配给这些行,但是我不希望这些行以相同的标准返回排序。这仅仅是查询执行方式的副作用(就我而言,在SQL Server 2008 R2上)还是可以保证这种行为?(我找不到关于这种保证的参考)。


1
修改(减少)列的长度时会发生什么?
可以说我有两列类型NUMBER(无精度和小数位数)和VARCHAR(300)。我看到这些列对于我的数据来说太大了,所以我想将它们修改为NUMBER(11)和VARCHAR(10)。因此,如果我运行此SQL语句: ALTER TABLE FOO MODIFY(BAR NUMBER(10)); 我可以在非空列上执行此操作吗? 如果是这样,那么如果有一个大于的值NUMBER(10),oracle会告诉我吗? 如果先前定义,列默认值是否会保持不变? 列为空的选项会保持不变吗? 该列上的主键,外键,唯一键是否保持不变? 涉及该列的约束条件将保持不变吗? 该列上的索引会保持不变吗? 是否有任何官方文件回答我的问题?

3
这两个查询在逻辑上是否等效?
这两个查询在逻辑上是否等效? DECLARE @DateTime DATETIME = GETDATE() 查询1 SELECT * FROM MyTable WHERE Datediff(DAY, LogInsertTime, @DateTime) > 7 查询2 SELECT * FROM MyTable WHERE LogInsertTime < @DateTime - 7 如果它们在逻辑上不是等效的,您可以给我第一个查询的逻辑等效,以便WHERE子句可以有效地使用索引(即消除函数包装)吗?

3
高效比较不同货币的价格
我想让用户可以在一个价格范围内搜索产品。无论产品设置哪种货币,用户都应该能够使用任何货币(美元,欧元,英镑,日元,...)。因此,产品价格为200美元,并且,如果用户搜索价格在100欧元至200欧元之间的产品,他仍然可以找到它。如何使其快速有效? 这是我到目前为止所做的。我保存price,currency code而calculated_price这是在欧元(EUR)的价格是默认货币。 CREATE TABLE "products" ( "id" serial, "price" numeric NOT NULL, "currency" char(3), "calculated_price" numeric NOT NULL, CONSTRAINT "products_id_pkey" PRIMARY KEY ("id") ); CREATE TABLE "currencies" ( "id" char(3) NOT NULL, "modified" timestamp NOT NULL, "is_default" boolean NOT NULL DEFAULT 'f', "value" numeric NOT NULL, -- ratio additional …
10 postgresql  money 

2
如何配置MySQL Innodb每小时处理1000次插入?
我的网站访问量很高,每小时可能会插入数千条新记录。 这个错误使网站瘫痪: PDOException: SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction: INSERT INTO {location_instance} (nid, vid, uid, genid, lid) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4); Array ( [:db_insert_placeholder_0] => 1059 [:db_insert_placeholder_1] => 1059 [:db_insert_placeholder_2] => 0 [:db_insert_placeholder_3] => cck:field_item_location:1059 [:db_insert_placeholder_4] => 1000 ) 如果MySQL无法处理这种类型的负载,我将感到非常惊讶。那么,我的问题是,这是数据库问题吗?如何配置MySQL以处理这么大的流量? …


1
EXECUTE AS USER和EXECUTE AS LOGIN有什么区别,使第二个用户行为异常?
最近,我一直在使用EXECUTE AS LOGIN来检查某个人是否可以在我们的数据库之一中使用表函数。测试表明他可以,但他一再报告失败。 该人使用登录名“ WEB”连接到数据库,并且该数据库中的用户“ WEB”与登录名“ WEB”相关联,因此我尝试了以下脚本: -- part 1 EXECUTE AS USER = 'WEB' GO SELECT USER_NAME() AS 'user_name' ,SUSER_NAME() AS 'suser_name' ,SUSER_SNAME() AS 'suser_sname' ,SYSTEM_USER AS 'system_user' GO REVERT GO 和 -- part 2 EXECUTE AS LOGIN = 'WEB' GO SELECT USER_NAME() AS 'user_name' ,SUSER_NAME() AS 'suser_name' ,SUSER_SNAME() …

7
MySQL索引VarChar
我试图索引blogentries数据库以获得更好的性能,但是发现了一个问题。 结构如下: CREATE TABLE IF NOT EXISTS `blogentries` ( `id_id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `title_id` varchar(100) COLLATE latin1_german2_ci NOT NULL, `entry_id` varchar(5000) COLLATE latin1_german2_ci NOT NULL, `date_id` int(11) NOT NULL, PRIMARY KEY (`id_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=271; 如下查询将正确使用索引: EXPLAIN SELECT id_id,title_id FROM blogentries ORDER …
10 mysql  varchar 

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.