Not the answer you need?
Register and ask your own question!
Many Forum changes were implemented on Tue 22 Sep. Read about new Ranks, Scoring, and Reactions.
Email [email protected] for any comments or concerns.

Memory Engine - Broken or Undiscovered feature?

sastryraghu@gmail.com[email protected] EntrantCurrent User Role Beginner
I have a setup that kind of mimic in-memory database. I have a table created as memory engine and the same server is configured to act as master and slave. The slave is another database which has the same table structure, but the engine is innodb. Now, we all know that the maximum limits of memory engine and that is restricted to max_heap_table_size. Now that, we have this limitation,I had to ahve some kind of work around. My application was a logger that continuously wrote to this table (no updates/deletes) and then the reporting module read it off the slave for graphs and analytical information.
So I decided to partition the memory engine based table on the master by primary key (hash partition) and there after even after 4M records, i dont see table full error!

Setup uses
MySQL 5.5 / Linux

here is how it is done:-

CREATE TABLE `callstack` (
`instance_id` bigint(20) NOT NULL AUTO_INCREMENT,
`t_thread_id` varchar(64) DEFAULT NULL,
`s_id` varchar(64) DEFAULT NULL,
`t_host` varchar(30) DEFAULT NULL,
`s_t_id` varchar(64) DEFAULT NULL,
`p_s_t_id` varchar(64) DEFAULT NULL,
`service` varchar(30) DEFAULT NULL,
`ipa` varchar(50) DEFAULT NULL,
`c_time` bigint(20) DEFAULT NULL,
`duration` smallint(6) DEFAULT NULL,
`s_host` varchar(30) DEFAULT NULL,
`event` varchar(15) DEFAULT NULL,
`mode` varchar(10) DEFAULT NULL,
PRIMARY KEY (`instance_id`)
) ENGINE=MEMORY DEFAULT CHARSET=latin1
/*!50100 PARTITION BY HASH (instance_id)
PARTITIONS 100 */

Current Table status:=
=====================

mysql> show table status like 'callstack%';
+
+
+
+
+
+

+
+
+
+-
+
+
+
---+
+
+
+
----+
+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+
+
+
+
+
+

+
+
+
+-
+
+
+
---+
+
+
+
----+
+
| callstack | MEMORY | 10 | Fixed | 4370554 | 479 | 2095729600 | 0 | 90993600 | 0 | 4370555 | 2013-02-28 10:20:41 | NULL | NULL | latin1_swedish_ci | NULL | partitioned | |
+
+
+
+
+
+

+
+
+
+-
+
+
+
---+
+
+
+
----+
+
1 row in set (0.00 sec)

If you observe, the max_data_length shows 0.

max_heap_table_size variable
============================

mysql> show variables like '%heap%';
+
+
+
| Variable_name | Value |
+
+
+
| max_heap_table_size | 268435456 |
+
+
+
1 row in set (0.00 sec)
(256 MB)

Is the memory engine broken or is this a edge case issue? But nonetheless, it is working for me as I wanted! I am trying to figure out how this is working inspite of the heap table restriction. Checked on the disk, if the partitions have created data, but there are only 2 files,callstack.frm and callstack.par.
Will post more details, but if you know anything on the internals, let me know!

Regards,

Comments

  • gmousegmouse Mod Squad Inactive User Role Beginner
    Each partition is a separate table, so currently your maximum table size (if the hash is perfectly uniform) will be 100 times 256 MB.

    See http://dev.mysql.com/doc/refman/5.1/en/partitioning-overview .html
    "In effect, different portions of a table are stored as separate tables in different locations."
  • sastryraghu@gmail.com[email protected] Entrant Current User Role Beginner
    Thanks for the response :) Even for Memory Engine tables? That is what a bit perplexing for me... As the entire data is in memory and nothing on disk...
Sign In or Register to comment.

MySQL, InnoDB, MariaDB and MongoDB are trademarks of their respective owners.
Copyright ©2005 - 2020 Percona LLC. All rights reserved.