小编Rol*_*DBA的帖子

GET_LOCK([name], 0) 行为和多个 GET_LOCK() 顺序

我从文档中读到,在RELEASE_LOCK从持有锁的连接调用之后分发由许多连接请求的锁的行为是未定义的。我很好奇:假设我有一个p1请求锁定的过程,GET_LOCK("lock", 0);以便对该过程的多次调用不会相互干扰。该过程在终止之前释放锁。我有另一个程序p2使用GET_LOCK("lock", 10);.

假设有大量对 的调用p1,并且在中间的某个地方p2被调用,如下所示:

...
CALL p1();
CALL p1();
CALL p2();
CALL p1();
#lock released here from first p1() call: who gets it?
...
Run Code Online (Sandbox Code Playgroud)

理论上,第二个过程不应该受到太大影响:它等待锁被释放,因为GET_LOCKinp1的超时为 0,p2应该是唯一一个在释放时请求锁的过程。但是,我认为我不能期望这种理想的行为是真实的。GET_LOCK从第一个过程开始,当然会花费一些小但非零的时间,并且由于锁不是按请求顺序分配的,是否有可能将锁传递给连续调用p1p2必须等待?

mysql locking

5
推荐指数
1
解决办法
1482
查看次数

MySQL 模拟中 SQL Server 的 TOP X

我在 MySQL 中寻找 SQL Server TOP (X) 模拟

在 SQL Server 中:

SELECT
  TOP 5
  Z
...
FROM
ORDER BY Z DESC
Run Code Online (Sandbox Code Playgroud)

如何在 MySQL 中做到这一点?

添加:

我找到了其他 RDBMS:返回 TOP N 记录

mysql

4
推荐指数
1
解决办法
516
查看次数

MySQL 事件不运行

我正在运行mysql 5.1.41,它与xamppWindows捆绑在一起。问题是事件不会自动运行,即使event schedulerON. 我有一个名为ta_tableusing的表innodb engine,它有 4 个字段,其中ti_time一个timestamp类型的默认值为current timestamp. 该字段ti_time被赋予插入行的时间戳值。现在我想从表中删除所有 2 小时前的行,ta_table所以我创建了一个事件,该事件如下所示

CREATE EVENT ev ON SCHEDULE EVERY 1 MINUTE STARTS 2011-07-17 14:54:52 ENABLE 
    DO
    begin
    delete from ta_table where timestampdiff(minute,ti_time,now())>120;
    end
Run Code Online (Sandbox Code Playgroud)

现在此事件应删除ti_time字段大于 2 小时(120 分钟)的任何行。当我执行此查询时

delete from ta_table where timestampdiff(minute,ti_time,now())>120;
Run Code Online (Sandbox Code Playgroud)

有用。它删除超过 2 小时的行。这意味着我的查询是正确的,但事件没有运行。我的事件调度程序正在运行,我确认了show processlist 它,它显示了 2 个进程根和事件调度程序。该state事件调度的是waiting for next activation。当我运行这个查询时

SELECT …
Run Code Online (Sandbox Code Playgroud)

mysql mysql-5 mysql-5.5 mysql-5.1

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

我的索引是否被使用?

我正在使用 SQL 服务器,创建我们数据库的人在我们最大的表上添加了很多索引。这些索引每个只包含一个字段。

对我来说,这些索引似乎几乎没有用,这是一个坏主意。

我担心的是删除部分或全部这些索引并影响我们实时系统的性能。无法在我们的测试系统上对此进行测试,因为我们的测试系统没有相同的负载或数据量。

就是想...

  • 有没有办法确定哪些索引从未使用过?
  • 例如,是否有某种分析可以显示在一段时间内哪些索引用于哪些查询?

sql-server-2008

4
推荐指数
1
解决办法
159
查看次数

MySQL 从 float (10,2) 到 fixed(10,2) 的转换

我有一个数据库,其中包含存储为浮点数的财务数据。自然地,这可能会在随机时间出现真正的问题(例如,当存在无法使用浮点算法足够接近地近似的精确值时)。

我的问题是

  • ALTER TABLE table MODIFY field fixed(10,2)选择字段时使用会 保留 MySQL 当前显示的固定值吗?
  • 有没有可能价值不是这个?

mysql floating-point

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

mysqldump:刷新权限选项

我想澄清一下--flush-privilegesmysqldump的选项。

以下是MySQL 文档中该选项的描述:

--flush-privileges    
Send a FLUSH PRIVILEGES statement to the server after dumping the mysql database.
This option should be used any time the dump contains the mysql database and any other
database that depends on the data in the mysql database for proper restoration. 
Run Code Online (Sandbox Code Playgroud)

当它说它在转储数据库发送刷新语句时,我读到这意味着数据、模式等被转储到备份文件中,然后刷新语句被发送到刚刚转储的数据库(之后抛弃)。

我想知道什么转储数据等需要刷新特权,所以我开始寻找解释以确定何时以及为什么使用它。

当我阅读各种答案时,我想到如果将flush 语句包含在转储文件中是有意义的。然后在将文件内容加载到数据库中后,运行刷新权限语句以在导入新信息后更新设置。

那么它是怎样工作的?
A)将数据转储到文件刷新源数据库?如果是这样,为什么这是必要的?
B) 在导入转储文件的内容后刷新目标数据库?
C) 除了我所描述的可能性之外的其他东西?

mysql mysqldump backup permissions

4
推荐指数
2
解决办法
3674
查看次数

在 InnoDB 上显示表状态非常慢

最近我们一直在从 MyISAM 迁移到 InnoDB,我知道 MyISAM 使用针对每个表的元信息来跟踪信息等 - 但是,数据库大约 1.8GB,在 400 多个左右的表中有 1+ 百万条记录。

问题来自像 PHPMyAdmin 这样的软件运行“SHOW TABLE STATUS FROM dbase;” 执行该命令最多可能需要 50 秒。有没有办法优化这个?(MySQL 或 MariaDB)

谢谢!

mysql innodb mariadb

4
推荐指数
1
解决办法
5100
查看次数

MySQL 中的 BEFORE INSERT 触发器

我是 MySQL 的新手,我在创建BEFORE INSERT触发器时遇到了问题。

我收到一个unexpected END错误。

我有一个以verlof_aanvragen列命名的表datum(还有 6 列)。

我想要完成的只是日期介于now()+8和之间now()+365CURDATE() + INTERVAL 8 DAY AND CURDATE() + INTERVAL 365 DAY) 可以插入的行。日期超出该间隔的插入应该失败。

我使用的是 MySQL 5.5.24 版。

这是代码:

CREATE TRIGGER chk_dates  
BEFORE INSERT ON verlof_aanvragen  
FOR EACH ROW  
BEGIN  
  IF (NEW.datum < CURDATE() + INTERVAL 8 DAY OR NEW.datum > CURDATE() + INTERVAL 365 DAY) 
THEN  
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Any Message'

END IF  
END 
Run Code Online (Sandbox Code Playgroud)

mysql trigger mysql-5.5

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

崩溃后 InnoDB 回滚期间关闭 MySQL

我再一次疑惑了。

昨晚我们在一些大型查询期间发生了服务器崩溃。早上重新启动后,MySQL 进入恢复模式。我需要关闭 MySQL 服务,它正在等待...我假设未提交事务的后台回滚如日志所示,但它已经在 HOT 服务器上运行了 9 个多小时,而且看不到结束的情况。

当服务重新启动时,可以在后台安全地中断并恢复该进程吗?或者我们必须等待它喘息

任何意见或想法(甚至有关正在发生的事情的信息)都会非常有帮助。提前谢谢您。

我们正在运行 MySQL 5.5。

这是日志输出:

140930  9:04:30  InnoDB: Starting an apply batch of log records to the database...
InnoDB: Progress in percents: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 …
Run Code Online (Sandbox Code Playgroud)

mysql innodb rollback transaction-log crash

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

MySQL 服务器不会以foreign_key_checks=0 启动

我正在使用 MySQL 版本 5.5.44 运行 Ubuntu

mysqld Ver 5.5.44-0ubuntu0.14.10.1 for debian-linux-gnu on x86_64 ((Ubuntu))

我有一个带外键的数据库。我希望在系统级别(而不是在会话中)禁用外键检查。

我看到系统 var foreign_key_checks似乎控制了这种行为,但是当我/etc/mysql/my.cnf(通过添加foreign_key_checks = 0)设置它时,服务器将无法启动。错误日志如下所示:

150729 15:38:18 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
150729 15:38:18 [Note] Plugin 'FEDERATED' is disabled.
150729 15:38:18 InnoDB: The InnoDB memory heap is disabled
150729 15:38:18 InnoDB: Mutexes and rw_locks use GCC atomic builtins …
Run Code Online (Sandbox Code Playgroud)

mysql innodb foreign-key mysqld

4
推荐指数
1
解决办法
7219
查看次数