malloc分配不同大小内存的效率

分别对64B,1K, 4K, 16K, 256K, 4M, 64M,512M,2G大小进行测试,测试程序如下: [source,c] —- #include #include #include #include long long count = 0; void alarm_handler(int sig) { printf(“%lld\n”, count); count = 0; alarm(1); } int main() { signal(SIGALRM, alarm_handler); alarm(1); while(1) { void *data = malloc(8589934592); if (!data) printf(“alloc error\n”); free(data); count++; } } —- 机器配置: 内存:8GB,1600MHz CPU:Intel Core I5,2 Core,4 Thread,2500MHz 测试时机器内存占用(足够各个大小): [source,shell] —- blue@debian:/tmp$ free -g total used free shared buff/cache available Mem: 7…

timescaledb性能测试

link:https://github.com/timescale/timescaledb[timescaledb]是postgresql数据库的一个插件,通过hypertable实现对时间序列数据库进行分块,通过把大表分为多个小表的方式,新的数据总是插入到最新的块上,由于进行了分块,使得索引数据变小,保持索引一直处于内存当中,不用去磁盘交换数据,因此加快了数据的插入速度。timescaledb官方提供了数据库性能测试工具和数据,可参考link:https://github.com/timescale/benchmark-postgres[benchmark-postgres]。 官方也有link:https://blog.timescale.com/timescaledb-vs-6a696248104e[测试报告],随着数据量的增加,数据插入的性能一直处于稳定状态,而相比之下,postgresql则表现为指数级下降。 本测试采用官方提供的数据和程序,测试环境为阿里云ecs.g5.large云服务器,具体配置如下: * 2核cpu * 8GB内存 * 两块100GB ssd云盘,1800 IOPS * 系统为Debian 9.2 ## 测试步骤: 分别挂在两块ssd云盘到/data和/data1。 安装postgresql-9.6,安装timescaledb扩展。修改配置,修改配置: ```ini shared_preload_libraries = 'timescaledb' data_directory = ‘/data/pgdb’ shared_buffers = 2GB ``` 保存后重启postgresql。具体步骤参考相应的文档。 下载官方提供的link:https://timescaledata.blob.core.windows.net/datasets/benchmark_postgres.tar.bz2[数据]并解压到/data1目录下,cpu-data.csv中包含1亿条数据,每条数据格式如下: ```shell 2016-01-03 23:59:30+00,host_1999,80.6521114433705,60.9865370795396,38.7496729040943,11.5620089238801,47.2124408432341,82.4793308352443,41.6463534391737,85.2477509705689,53.843722695106,52.3795963946359 ``` 下载测试程序,安装go环境,并编译3个程序,并将测试程序拷贝到/data1目录下。 创建benchmark数据,并初始化cpu_ts和cpu_pg表: ```shell postgres@debian:/data1$ psql -c 'CREATE DATABASE benchmark;' postgres@debian:/data1$ psql -d benchmark benchmark-setup-timescaledb.sql postgres@debian:/data1$ psql -d benchmark benchmark-setup-postgresql.sql ``` 分别想cpu_pg和cpu_ts数据库插入数据: ``` postgres@debian:/data1$ ./copy --db-name=benchmark --table=cpu_pg --verbose --reporting-period=30s --file=cpu-data.csv --connection='host=localhost user=postgres password=postgres' postgres@debian:/data1$ ./copy…