小编Joh*_* N.的帖子

使用字符集 UTF-8 创建 MySQL 数据库

我是 MySQL 的新手,我想知道:

如何utf-8像在 navicat 中那样创建带有字符集的数据库?

create mydatabase;
Run Code Online (Sandbox Code Playgroud)

...似乎正在使用某种默认字符集。

mysql collation utf-8

194
推荐指数
2
解决办法
42万
查看次数

如何找到 PostgreSQL 的数据目录?

我忘记了上次是如何启动 PostgreSQL 的(那是几个月前),我不记得数据目录位于何处。该postgres命令似乎需要数据目录的位置。

如果有帮助,我在 MacOsX 上。

/usr/local/postgres 在我的 Mac 上不存在。

使用下面提供的答案,我发现它在这里:

/usr/local/var/postgres
Run Code Online (Sandbox Code Playgroud)

postgresql mac-os-x

162
推荐指数
6
解决办法
22万
查看次数

使用 TIMESTAMP WITHOUT TIME ZONE 的有效用例是什么?

关于两者之间的差异,有一个很长且相当清晰的答案

  • TIMESTAMP WITH TIME ZONE -vs-
  • TIMESTAMP WITHOUT TIME ZONE

在 SO post Ignoring time zone together in Rails and PostgreSQL 中可用。

我想知道的是:实际使用是否有任何有效的用例,TIMESTAMP WITHOUT TIME ZONE或者应该将其视为反模式?

postgresql timestamp

55
推荐指数
3
解决办法
7万
查看次数

如何使用 expdp 和 impdp 命令传输数据?

我是 Oracle 菜鸟,我的目的是将所有数据和元数据从一个架构传输到 Oracle 数据库中的另一个架构。我打算使用数据泵expdpimpdp命令。我对此有疑问:

  • 我可以在没有用户的情况下创建目标模式还是应该先创建一个用户(也可以创建模式)?
  • 我可以使用 SYS(作为 sysdba)帐户执行expdpimpdp命令吗?这是首选方法吗?
  • 该语句是否从模式中获取所有对象(数据和元数据)并将它们移动到不同的模式中?

    expdp \"/ as sysdba\" schemas=<schemaname> directory=dumpdir dumpfile=<schemaname>.dmp logfile=expdp_<schemaname>.log  
    
    Run Code Online (Sandbox Code Playgroud)

    那么目标模式是impdp命令后源模式的精确副本吗?

schema oracle export impdp expdp

29
推荐指数
1
解决办法
17万
查看次数

DELETE 命令未在 30,000,000 行表上完成

我继承了一个数据库,并希望对其进行清理和加速。我有一个包含 30,000,000 行的表,其中许多是由于我们程序员的错误而插入的垃圾数据。在添加任何新的、更优化的索引之前,我将表从 MyISAM 转换为 InnoDB,并希望删除大量包含垃圾数据的行。

数据库是 MySQL 5.0,我有服务器的 root 访问权限。我首先通过 Adminer 运行这些命令,然后通过 phpMyAdmin 运行,结果相同。

我正在运行的命令是,

DELETE
FROM `tablename`
WHERE `columnname` LIKE '-%'
Run Code Online (Sandbox Code Playgroud)

本质上,删除此列中以 dash 开头的任何内容-

它运行了大约 3-5 分钟,然后当我查看进程列表时,它消失了。

然后我跑,

SELECT *
FROM `tablename`
WHERE `columnname` LIKE '-%'
Run Code Online (Sandbox Code Playgroud)

它返回数百万行。

为什么我的删除语句没有完成?

PS,我知道 MySQL 5.0 已经过时了。我正在将数据库移动到 MySQL 5.6 w InnoDB(可能是 MariaDB 10 w XtraDB),但在此之前,我希望按原样使用 DB 来回答这个问题。

——

编辑已删除,请参阅我的答案。

mysql innodb myisam delete mysql-5.0

22
推荐指数
4
解决办法
4万
查看次数

Windows 操作系统 Quantum 与 SQL 操作系统 Quantum

简单的问题

SQL Server Quantum (4 ms) 如何与 Server OS Quantum(通常:187.5 ms)同步?

简单问题解释

在使用 184 ms 的 OS 量程后(对应于 46 个完整的 SQL 量程),OS 量程有 3.5 ms 的时间,然后它必须将调度移交给不同的进程。SQL 操作系统启动一个时间段(4 毫秒),在 3.5 毫秒后,操作系统时间段决定停止当前的 SQL 操作系统线程,该线程在它产生计划之前还有 0.5 毫秒。现在会发生什么?


深入了解 OS Quantum

在接下来的几节中,我将写出迄今为止我所发现的关于 OS 量程以及如何计算量程的持续时间。操作系统“量子”的持续时间基于“滴答”,而“滴答”本身的持续时间基于“时钟间隔”,通常为 15.625000 毫秒。但是让我详细说明一下......

打钩

在博客文章Know Thy Tick 中,作者 Jim 解释了时钟间隔(又名“滴答”)的基础知识以及它们的用途。

当我读到诸如“时钟间隔……对于大多数 x86 多处理器大约为 15 毫秒”之类的内容时,我不得不确定我的时钟或“滴答”间隔的值。幸运的是,我在书中读到了这句话,Windows Internals第四版提供了一个参考来帮助我解决我的痛苦。... 上述书籍的作者 Mark Russinovich 慷慨地在其网站上提供了ClockRes实用程序。运行此实用程序,我能够确定我的 x86 多处理器 PC 上的时钟间隔为 15.625000 毫秒。有趣,但我好奇的头脑想知道更多。

量子

文章作者在他的第二篇文章中继续解释 那...

当然,tick 间隔重要的真正原因是它会影响线程调度。Windows 调度程序在允许另一个具有相同优先级的任务运行之前,为每个线程提供一个“时间”来执行。调度程序分配给线程的量程是滴答间隔的倍数。为特定线程选择的特定量子值有点超出我想在本文中讨论的内容。

好的,所以我知道什么是量子,但不知道量子将运行多长时间。 …

sql-server

21
推荐指数
2
解决办法
1801
查看次数

截断表需要哪些权限?

我有一个对数据库具有以下权限的 SQL 帐户:

在此处输入图片说明

db_executor您看到此帐户所属的角色是由以下脚本创建的:

CREATE ROLE [db_executor] AUTHORIZATION [dbo]
GO

GRANT EXECUTE TO [db_executor] 
GO
Run Code Online (Sandbox Code Playgroud)

当我运行一个selectupdateinsertdelete放在桌子上,它工作正常。当我尝试truncate桌子时,它给了我这个错误信息:

找不到对象“TableName”,因为它不存在或您没有权限。

此帐户缺少什么权限?

sql-server permissions truncate sql-server-2012

18
推荐指数
2
解决办法
7万
查看次数

寻找 FILESTREAM 内幕信息

在 Microsoft SQL Server 2012 上激活 FILESTREAM 功能后,SQL Server 将在系统上创建“隐藏”共享。份额定义如下:

Sharename          FILESTREAM_SHARE
Path               \\?\GLOBALROOT\Device\RsFx0320\<localmachine>\FILESTREAM_SHARE
Remark             SQL Server FILESTREAM share
Maximum users      unlimited
Users Caching      Manual caching of documents 
Permissions        NT-AUTHORITY\Authenticated Users, FULL
Run Code Online (Sandbox Code Playgroud)

该名称是您在SQL Server 配置管理器中最初配置 FILESTREAM 时提供的共享名称。但它是为了什么?

迄今为止

我通读了所有可用的 FILESTREAM 文档,从以下位置开始:

sql-server-2008 sql-server database-internals sql-server-2012 filestream

14
推荐指数
1
解决办法
1618
查看次数

Postgres 更新表(仅)如果它存在

我有一个服务器和几个客户端应用程序。必须先启动服务器,然后才能启动客户端。如果它们不存在,客户端然后在数据库中创建表。

当服务器启动时(某些表不存在)并且以下查询给了我一个exception

UPDATE recipes SET lock = null 
WHERE lock IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)

Relation >>recipes<< does not exists

我想exception通过检查此表是否存在来避免这种情况。

UPDATE recipes SET lock = null
WHERE lock IS NOT NULL AND
WHERE EXISTS (
   SELECT 1
   FROM   information_schema.tables 
   WHERE  table_schema = 'public'
   AND    table_name = 'recipes'
   );
Run Code Online (Sandbox Code Playgroud)

但这query不起作用。你能告诉我我的错误在哪里吗?

postgresql

12
推荐指数
1
解决办法
2万
查看次数

SQL Server 2008R2 中的自动更新统计信息:尽管有大量行插入,为什么某些统计信息仍然过时?

在对慢查询进行调查期间,执行计划似乎异常次优(嵌套循环执行了 900 万次执行搜索,其中估计执行次数为 1)。在确认了一些确实过时的相关统计数据后,我重建了统计数据并且性能问题得到了有效解决。

此数据库启用了自动更新统计信息(默认情况下启用)。我知道有一个基于 20% + 500 行修改(更新/插入/删除)的自动统计更新阈值。多个索引似乎已在很大程度上超过了此阈值,因此似乎存在 (A) 自动更新问题或 (B) 更新策略比我在网上找到的更多文档。

我很欣赏可以设置计划任务来更新统计信息,如果找不到其他解决方案,这可能是我们采取的方法,但它确实让我们感到困惑,为什么如此大量的修改不会触发某些统计数据的自动更新 - 了解为什么可能会帮助我们决定哪些统计数据需要由计划任务更新。

一些补充说明:

  1. 在负载测试创建数据的数据库中注意到了该问题,因此在短时间内添加了大量数据,因此如果自动更新定期发生(例如,最多一天一次)那么这可以解释一些观察到的行为。此外,我们的负载测试往往会给数据库带来很大的压力,因此我想知道 SQL 是否在负载很重时推迟了统计信息更新(随后由于某种原因不更新统计信息)。

  2. 在尝试使用包含连续 INSERT、SELECT 和 DELETE 语句的测试脚本重新创建此问题时,问题并未发生。我想知道这里的区别是否是这些语句每个都会影响每个 SQL 语句的许多行,而我们的负载测试脚本倾向于单独插入行。

  3. 有问题的数据库设置为“简单”恢复模式。

一些相关链接:

我也通过微软连接提出了这个问题:

更新 2011-06-30:

在进一步调查中,我相信超出阈值级别(例如 500 行 + 20%)的统计数据是问题查询未使用的统计数据,因此它们可能会在查询运行时更新这需要他们。对于该统计数据通过查询中使用,这些被定期更新。剩下的问题是,仅在相对较少的插入之后,这些统计数据就会严重误导查询计划优化器(例如,在估计数量为 1 的情况下导致上述 900 万次左右的搜索)。

我此时的预感是问题与主键选择不当有关,键是使用 NEWID() 创建的唯一标识符,因此这会很快创建高度碎片化的索引 - 特别是作为 SQL 中的默认填充因子服务器是 100%。我的预感是,在相对较少的行插入后,这会以某种方式导致误导性统计数据 - 低于重新计算统计数据的阈值。这可能都不是问题,因为我已经生成了大量数据而没有中途重建索引,因此糟糕的统计数据可能是由此产生的非常高的索引碎片的结果。我想我需要将 SQL Server 维护周期添加到我的负载测试中,以便更好地了解真实系统长时间内的性能。

更新 2012-01-10:

另一个需要考虑的因素。SQL Server 2005 中添加了两个跟踪标志(并且似乎在 2008 年仍然存在)以解决与出现过时和/或误导性统计数据相关的特定缺陷。有问题的标志是:

DBCC TRACEON(2389)
DBCC TRACEON(2390)
Run Code Online (Sandbox Code Playgroud)

MSDN:Ian Jose 的 WebLog:升序键和自动快速更正统计 数据,Fabiano Amorim

在决定启用这些标志时,您当然应该非常小心,因为它们可能会产生不利影响。

performance sql-server-2008 sql-server

11
推荐指数
1
解决办法
9166
查看次数