数据库管理员

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

3
多语句事务中不允许使用ALTER DATABASE语句
我已经从此处下载了基于AdventureWorks的内存中示例,并遵循了随附文档中描述的所有步骤。但是,当我尝试在SQL Server Management Studio中运行脚本时,出现错误消息: 多语句事务中不允许使用ALTER DATABASE语句 错误指向第9行,即: IF NOT EXISTS (SELECT * FROM sys.data_spaces WHERE type='FX') ALTER DATABASE CURRENT ADD FILEGROUP [AdventureWorks2012_mod] CONTAINS MEMORY_OPTIMIZED_DATA GO 由于这是(或多或少)正式的Microsoft文档,所以我认为这是我做错的事情,但是我不知道这是什么。

5
对于大型应用程序,在同一个数据库的不同模式的表上创建外键是个坏主意吗?
我正在将基于pl / sql网络的大型应用程序传输到专用服务器。此应用程序位于具有70个程序包代码的模式中。在不同的时间大约有15个人进行了此应用程序。对我们来说,通常的做法是在不同模式的引用表上创建外键,因为它确实很方便并且可以使数据库保持整洁,因为我们不需要在不同的模式中保留相同的引用表。 但是无论如何,我的DBA(使用DB创建新实例并在Solaris区域内复制我的应用程序)今天非常苛刻,“不同模式上的外键是邪恶的,您需要销毁它!”。他没有解释他的观点。 在大型应用程序上这样做真的是个坏主意吗?

2
PostgreSQL选择整数类型的空字段
我有一个表格,我需要选择所有fk_fc_id字段为空的行(以删除它们为前提), Column | Type | Modifiers ---------------+-----------------------------+------------------------------------------------------------ di_timestamp | timestamp without time zone | di_item_value | character varying(10) | fk_fc_id | integer | di_id | integer | not null default nextval('data_item_di_id_seq1'::regclass) 但这行不通 # select fk_fc_id,di_timestamp,di_item_value from data_item where fk_fc_id=""; ERROR: zero-length delimited identifier at or near """" LINE 1: ...di_timestamp,di_item_value …
13 postgresql 


2
将600GB表索引键数据类型从INT更改为BIGINT的最快方法
我需要将600GB MySQL表中的数据类型从INT更改为BIGINT。该列具有唯一索引。对于未签名的INT,我可能会很好,但是我认为更改为BIGINT或BIGINT会非常痛苦。该表的引擎是InnoDB。什么会更容易: 更改表 复制结构和 INSERT INTO (SELECT *) 转储表和更改转储文件表定义 还要别的吗? 更新:根据要求,MySQL ver 5.5.15,没有外键并创建表: CREATE TABLE `tbl` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `created_at` datetime NOT NULL, `tid` bigint(20) NOT NULL, `t` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `f` tinyint(1) NOT NULL, `i_id` bigint(20) NOT …

3
在SQL Server 2012中索引PK GUID
我的开发人员已将其应用程序设置为将GUID用作几乎所有表的PK,并且默认情况下,SQL Server已在这些PK上设置了聚集索引。 该系统还比较年轻,我们最大的表刚刚超过一百万行,但是我们正在研究索引并希望能够迅速扩展,因为不久的将来可能会需要它。 因此,我的第一个倾向是将聚集索引移动到创建的字段,该字段是DateTime的bigint表示形式。但是,使CX唯一的唯一方法是在此CX中包括GUID列,但先创建顺序。 这会导致群集密钥太宽,是否会提高写入性能?读取也很重要,但是此时写入可能是一个更大的问题。


2
pg_upgrade无法识别的配置参数“ unix_socket_directory”
我正在尝试使用此命令作为postgres用户将Fedora 18中的Postgresql从9.2升级到9.3 $ pg_upgrade -b /bin -B /usr/pgsql-9.3/bin -d /var/lib/pgsql/data -D /var/lib/pgsql/9.3/data/ -j 2 -u postgres 日志中的错误 命令:“ / bin / pg_ctl” -w -l“ pg_upgrade_server.log” -D“ / var / lib / pgsql / data” -o“ -p 50432 -b -c listen_addresses =” -c unix_socket_permissions = 0700 -c unix_socket_directory ='/ var / …

3
断开网络连接会停止查询吗?
我最近对100,000条记录执行了更新查询。我意识到在查询运行时我犯了一个错误,并迅速拔下了网络电缆。 更新查询吗 停止处理并完全回滚? 继续处理以完成并提交? 停止处理,只保留部分目标行更新?

3
如何查看SQL Server 2008中的内存中缓存了什么?
有没有一种方法可以找出SQL Server 2008 R2中缓存的内容?我找到了以下不错的文章:http : //blog.sqlauthority.com/2010/06/17/sql-server-data-pages-in-buffer-pool-data-stored-in-memory-cache。但是,我想知道每个表和索引存储了多少数据(例如百分比和KB)。是否有一些简单的方法来获取此类数据?

6
如何在MySQL中将列添加到大表
我是PHP开发人员,所以不要严格。我有一张大桌子〜5.5gb转储。我们的项目经理决定在其中添加新列以执行新功能。表是InnoDB,所以我尝试了什么: 使用表锁更改屏幕中的表。花了大约30个小时,什么也没有。所以我就停止了。首先,我犯了一个错误,因为我没有结束所有事务,但是第二次不是多重锁。状态为copy to tmp table。 由于我还需要对此表进行分区,因此我们决定进行转储,重命名并使用相同的名称和新的结构来创建表。但是转储正在严格复制(至少我没有发现其他东西)。所以我添加了一个新的转储列sed并进行查询。但是一些奇怪的错误开始了。我相信这是由字符集引起的。utf-8中的表和文件在之后成为us-ascii sed。所以我在30%的数据上遇到了错误(未知命令'\'')。所以这也是一个坏方法。 还有什么其他方法可以完成此操作并提高性能(我可以使用php脚本来完成,但是要花很多时间)。INSERT SELECT在这种情况下的性能如何。 感谢您的任何进步。
13 mysql  innodb 

1
慢查询未记录
我试图在我们的服务器上启用慢速查询日志记录,以便识别可以使用优化的任何查询。听起来很简单,但是没有写入我的文件。我没有收到任何错误或类似信息,似乎没有记录缓慢的查询。我记得配置更改后重新启动mysql。 我正在使用MySQL Ver 5.1.61。这是my.cnf中的内容: slow-query-log=1 slow-query-log-file=/var/logs/my.slow.log long_query_time=1 文件/var/logs/my.slow.log以mysql作为所有者,也是出于调试的目的,我对日志文件进行了所有读/写操作。 我在上面将long_query_time设置为1,因为我只是想看看它是否在工作。我尝试将其设置得较低(例如0.3),但仍然没有记录任何内容。我知道我的应用程序正在运行的查询需要1秒钟以上的时间,并且我还故意SELECT sleep(10);在终端中运行了查询日志()进行测试,并且该日志仍然为空。 我看了看文档,从中可以看出这应该行得通。有人对我做错了什么建议吗?任何建议将不胜感激,非常感谢! 编辑:根据评论中的要求,我运行了查询: `SELECT variable_value FROM information_schema.global_variables WHERE variable_name IN ('slow_query_log','slow_query_log_file','long_query_time');` 结果: 10.0000000 /var/run/mysqld/mysqld-slow.log OFF 显然,我的配置更改没有考虑在内,因为我相信这些是默认设置。我非常确定我正在修改的my.cnf文件已被解析,好像我输入了无效值一样mysql重启时将出错。这可能是怎么回事? 另一个编辑: 采纳@RolandoMySQLDBA的建议并将慢速查询配置行移至[mysqld]我的设置后,似乎可以节省。现在,上面的variable_value查询的结果是: 1.0000000 /var/logs/my.slow.log ON 但是我仍然没有看到文件my.slow.log被写入。我认为这不是权限问题,因为该文件由mysql拥有,并且我已为该文件上的所有用户添加了所有权限。有人能想到为什么这样不起作用的原因吗? 编辑:解决了!慢查询日志的路径不正确,应该是/var/log/my.slow.log而不是/ var / log * s * / my.slow.log。感谢大家的帮助,我学会了分配!

4
将大查询分为多个小查询是否更好?
在某些情况下,需要进行非常大的查询才能将多个表及其中的子选择语句连接在一起以产生所需的结果。 我的问题是,我们应该考虑使用多个较小的查询,并通过多次查询数据库来将逻辑操作带入应用程序层,还是一次完成所有查询就更好了? 例如,考虑以下查询: SELECT * FROM `users` WHERE `user_id` IN (SELECT f2.`friend_user_id` FROM `friends` AS f1 INNER JOIN `friends` AS f2 ON f1.`friend_user_id` = f2.`user_id` WHERE f2.`is_page` = 0 AND f1.`user_id` = "%1$d" AND f2.`friend_user_id` != "%1$d" AND f2.`friend_user_id` NOT IN (SELECT `friend_user_id` FROM `friends` WHERE `user_id` = "%1$d")) AND …

2
重置SQL Server 2012序列
我正在测试和填充利用该SEQUENCE对象的特定表。在这个过程中,我正在测试用成千上万的插入行填充表(因为我不熟悉如何编程)。我在此特定表上看到的问题是,当我开始另一个人口测试时,SEQUENCE它不会重置回我想要的第一个数字(即1)。 当我希望重新运行新测试时,请删除有问题的表,然后运行以下命令: DROP SEQUENCE foo.fee; GO DROP SCHEMA foo; GO 当我想重新运行测试时,我运行以下SCHEMA&SEQUENCE命令,它们按以下顺序触发: CREATE SCHEMA foo; GO CREATE SEQUENCE foo.fee START WITH 1 INCREMENT BY 1 NO CYCLE NO CACHE; GO 然后创建表: CREATE TABLE foo.sample_table_with_data (order_number bigint PRIMARY KEY NOT NULL, sample_column_one nvarchar(max) NULL, sample_column_two nvarchar(max) NULL, sample_column_three nvarchar(max) NULL) GO 一旦完成,我将运行以下插入命令50,000次: …

4
相互验证两个表的快速方法
我们正在执行ETL流程。说完所有的话,有一堆表应该是相同的。验证那些表(在两个不同服务器上)实际上是否相同的最快方法是什么。我在说模式和数据。 我可以像在单个文件或文件组上一样对表进行哈希运算吗?可以相互比较。我们有Red-Gate数据比较,但是由于有问题的表包含数百万行,因此我希望每个表都具有更高的性能。 一种吸引我的方法是对联合声明的创造性使用。但是,如果可能的话,我想进一步探讨一下哈希概念。 发布答复更新 对于任何未来的参观者……这就是我最终采取的确切方法。效果很好,我们正在每个数据库中的每个表上执行此操作。感谢下面的回答为我指出了正确的方向。 CREATE PROCEDURE [dbo].[usp_DatabaseValidation] @TableName varchar(50) AS BEGIN SET NOCOUNT ON; -- parameter = if no table name was passed do them all, otherwise just check the one -- create a temp table that lists all tables in target database CREATE TABLE #ChkSumTargetTables ([fullname] varchar(250), [name] …

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.