我有一个MySQL存储例程,在这里我想使用一个临时数据表来存储中间结果。为了避免创建一个“正常”表,我想使用一个内存中的表,当例程执行完成后,这个表就会消失。我是一个MySQL新手,但我想这是个好办法:
DROP TABLE IF EXISTS MyInMemoryTable;
CREATE TABLE MyInMemoryTable ( numberField int ) ENGINE = MEMORY;
...
DROP TABLE IF EXISTS MyInMemoryTable;
我的例程只适用于一个用户,但是如果多个用户同时运行例程,我会感到紧张吗?
MyInMemoryTable
我想提高在一个of大小的MySQL MyISAM表上运行的一些数据库查询的速度。
该表大约有1000万行,大约有10列INT和VARCHAR。该表仅用于读取,并且不会更新或插入到表中。我对表执行的唯一查询是:
SELECT name,age FROM myisamtable WHERE category1='example' AND (category2='example2' OR category4='example4') ORDER BY id DESC LIMIT 1000,2000
为了获得更快的性能,我应该将表转换为内存吗?(我不关心是
日安,朋友们。我在一台32b机器上运行Fedora 13。
我有一个包含15亿个ip地址的巨大表(当我有资源时,这些地址将被拆分,不用担心;)。当我运行此查询时:
SELECT ip FROM ips ORDER BY RAND() LIMIT 500000;
有时表崩溃(我收到错误"MySQL表被标记为已崩溃,应该修复“),有时不会。我的问题是:是什么原因导致MyISAM或InnoDB表崩溃?记忆有影响吗?因为我的系统监视器显示它只使用了大约30%。
下面是my.cnf (默认,从meta-package安装):
[mysqld]
datadir=/var/lib/mysql
soc
我已经安装了许多使用MySQL引擎的数据库,并安装了InnoDB服务器。在每个DB中都有大量的过程,mysql.proc表包含超过250,000行,当我需要运行这样的查询时,它最终会变慢:
SHOW PROCEDURE STATUS WHERE db LIKE '%SomeDB%';
上面的查询花费了超过5秒的时间来执行和调整MySQL配置参数,例如myisam_sort_buffer_size或key_buffer_size (在已经足够大的情况下)没有什么不同。我已经在我的服务器上安装了256 my内存,我不认为这是因为内存短缺,可能是一些错误的配置,我不知道它。有什么暗示
我有一个FooBar视图,如:
CREATE VIEW `FooBar` AS
SELECT * FROM `Foo`.`Bar`
UNION ALL
SELECT * FROM `Foo1`.`Bar`
当我SELECT * FROM FooBar时,我得到:
表‘/tmp/#sql_1234_5.MYI’的不正确密钥文件;尝试修复它
当我运行这样的select语句时:
SELECT * FROM `Foo`.`Bar`
UNION ALL
SELECT * FROM `Foo1`.`Bar`
万事如意。问题显然与我的FooBar视图有关。
当我REPAIR TABLE Foo
是否有任何配置错误会导致mysql..mysql调谐器显示的创建过多的临时表?
Current max_heap_table_size = 200 M
Current tmp_table_size = 200 M
Of 17158 temp tables, 30% were created on disk
table_open_cache = 125 tables
table_definition_cache = 256 tables
You have a total of 97 tables
You have 125 open tables.
Current table_cache
我有一个运行在Ubuntu12.04服务器上的MySQL实例,它配备了120 GB内存。有几个PHP脚本运行在上面,有时会设置新的mysql参数。其中一个脚本在将数据插入MySISAM表之前使用大型内存表来合并数据。
最近,我将max_heap_table_size和tmp_table_size从16 GB更新到20 GB,以避免“表是满的”错误。因此,MySQL在脚本的下一次运行中崩溃。
实际上,它首先生成了strack跟踪:
14:30:19 UTC - mysqld got signal 11 ;
This could be because you hit a bug. It is al
我对mysql不是很了解。所以如果这是个愚蠢的问题请原谅。
我今天接到了一个来自我的DBA的电话,我的应用程序创建的临时表数量激增。
但我没有显式地创建任何临时表。
在故障排除后,我们发现每次在子查询中使用文本colomn时,都会创建一个临时表。
作为开发人员,使用子查询和文本列创建临时表使我感到困惑。
我的问题是,作为开发人员,我如何理解查询何时会创建临时表(在后台)。
我做了一些搜索,发现我可以做一些类似的事情
show GLOBAL status like 'created_tmp_disk_tables'
但它告诉我什么呢?如何知道我的查询是否导致了临时表。
我在64位Ubuntu15.04上使用了MySQL版本5.6.25-0ubuntu0.15.04.1。我有2GB内存,磁盘是SSD (因此,在我看来,写入磁盘并不是那么昂贵)。我目前只有两个小Wordpress博客的数据库。我并没有试图深入优化这个问题,但是我遇到了一些我认为是奇怪的行为。
当我运行MySQLTuner 1.5.0时,我得到以下输出:
[OK] Currently running supported MySQL version 5.6.25-0ubuntu0.15.04.1
[OK] Operating on 64-bit architecture
-------- Stor
我正在考虑将将我的MySQL数据库的数据库的放到一个ramdisk上放在Linux下。这样做的原因是为了绕过4gb内存中临时表的最大值 in MySQL。我唯一担心的是,如果基于MyISAM的ramdisk临时表会变得比ramdisk更大,那么如何避免磁盘空间外的错误?你能不能--如何创建一个溢出机制?在这种机制中,内存的大小就是内存的大小加上硬盘上的空闲空间。如果ramdisk将满,其余的将被写入硬盘。