Innotop for MySQL 8 written in Go

Innotop Go

Innotop for MySQL 8 written in Go

Project started to learn Go and doing something useful (I hope).

Additionaly the official Innotop written in Perl became very hard to maintain.

Main Processlist Screen

Screenshot from 2021-04-06 18-57-56

InnoDB Dashboard

Screenshot from 2021-04-07 23-20-20

Memory Dashboard

Screenshot from 2021-04-10 13-16-26

Demo

Demo (0.1.1) on MacOS (thank you @datacharmer):

innotopgo

Owner
Comments
  • Add InnoDB Buffers information

    Add InnoDB Buffers information

    Add a new screen with InnoDB information like:

    • buffer pool (size and # , free pages, dirty pages, Hit Rate...)
    • page statistics (Reads, Writes, Created, read/sec, write/sec, create/sec)
    • Insert Buffers
    • AHI

    anything more ?

  • Locking Info Dashboard is not working

    Locking Info Dashboard is not working

    Hi Lefred,

    I have installed the innotopgo version 0.3 tool and it is very helpful

    I was testing all the available dashboards by creating the test scenarios, the locking info dashboard is not getting switched post giving the input as , also it is prompting to provide the thread_id as input, post giving the thread_id, it is failing to fetch the locking details

    please help to resolve this issue or let me know if I am missing something.

    PFA Screenshot 2021-10-27 at 6 14 33 PM ,

  • Update README.md

    Update README.md

    Updated the README.md to include connection instructions for the application. On first use of the app, I expected something like innotop's connection, but had to look at the source code to find the mysql url. Providing this in the README will help prospective users (and may be later a --help/-h switch).

  • Add help lines to Makefile

    Add help lines to Makefile

    See the help using mmake

    $ mmake help
    
      build      Build executable in current OS
      fmt        format code (default)
      genall     Build all executables
      genlinux   Build Linux executable
      genmac     Build MacOS executable
      genwin     Build Windows executable
      lint       check code for best practices
      vet        Check code for correctness
    
    
  • Add a thread information Screen

    Add a thread information Screen

    Get all information possible for a thread.

    Check how to add the information returned by:

    select *, pps.PROCESSLIST_COMMAND AS command,
                                      pps.THREAD_ID AS thd_id, pps.PROCESSLIST_ID AS conn_id,
                                      conattr_pid.ATTR_VALUE AS pid, pps.PROCESSLIST_STATE AS state,
                                      if((pps.NAME in ('thread/sql/one_connection','thread/thread_pool/tp_one_connection')),
                                       concat(pps.PROCESSLIST_USER,'@',pps.PROCESSLIST_HOST),
                                       replace(pps.NAME,'thread/','')) AS user,
                                      pps.PROCESSLIST_DB AS db, sys.format_statement(pps.PROCESSLIST_INFO) AS current_statement,
                                      if(isnull(esc.END_EVENT_ID), format_pico_time(esc.TIMER_WAIT),NULL) AS statement_latency,
                                      format_pico_time(esc.LOCK_TIME) AS lock_latency,
                                      if(isnull(esc.END_EVENT_ID),esc.TIMER_WAIT,0) AS sort_time
                                from (((((((performance_schema.threads pps
                                left join performance_schema.events_waits_current ewc
                                    on((pps.THREAD_ID = ewc.THREAD_ID)))
                                left join performance_schema.events_stages_current estc
                                    on((pps.THREAD_ID = estc.THREAD_ID)))
                                left join performance_schema.events_statements_current esc
                                    on((pps.THREAD_ID = esc.THREAD_ID)))
                                left join performance_schema.events_transactions_current etc
                                    on((pps.THREAD_ID = etc.THREAD_ID)))
                                left join sys.x$memory_by_thread_by_current_bytes mem
                                    on((pps.THREAD_ID = mem.thread_id)))
                                left join performance_schema.session_connect_attrs conattr_pid
                                    on(((conattr_pid.PROCESSLIST_ID = pps.PROCESSLIST_ID) and (conattr_pid.ATTR_NAME = '_pid'))))
                                left join performance_schema.session_connect_attrs conattr_progname
                                    on(((conattr_progname.PROCESSLIST_ID = pps.PROCESSLIST_ID)
                                    and (conattr_progname.ATTR_NAME = 'program_name'))))
                                where pps.PROCESSLIST_ID is not null
                                  and pps.PROCESSLIST_COMMAND <> 'Daemon'
                                  and user <> 'sql/event_scheduler'
                                order by sort_time desc                            
    

    We could also display the list of previous queries in a transaction

  • Keyboard buffer queue is not flushed

    Keyboard buffer queue is not flushed

    Currently, when you are in a different dashboard like or , if you press some keys that have a meaning in the Processlist (main dashboard), once you get back to it (<--) the first element out of the queue is processed and can lead you again to another dashboard, etc...

    I didn´t find the way to flush the keyboard queue, neither to workaround it.

  • Add a Transaction Screen

    Add a Transaction Screen

    Same a Proceslist but relate to Transaction, something like:

    History  Versions  Undo  Dirty Buf  Used Bufs  Txns  MaxTxnTime  LStrcts
          0                      0.00%     84.53%     5       01:16         
    
    ID   User  Host       Txn Status  Time   Undo  Query Text
    768  root  localhost  ACTIVE      01:16     1            
    769  root  localhost  ACTIVE      01:10     0 
    
Dumpling is a fast, easy-to-use tool written by Go for dumping data from the database(MySQL, TiDB...) to local/cloud(S3, GCP...) in multifarious formats(SQL, CSV...).

?? Dumpling Dumpling is a tool and a Go library for creating SQL dump from a MySQL-compatible database. It is intended to replace mysqldump and mydump

Nov 9, 2022
CRUD API example is written in Go using net/http package and MySQL database.
CRUD API example is written in Go using net/http package and MySQL database.

GoCrudBook CRUD API example is written in Go using net/http package and MySQL database. Requirements Go MySQL Code Editor Project Structure GoCrudBook

Dec 10, 2022
a powerful mysql toolset with Go
a powerful mysql toolset with Go

go-mysql A pure go library to handle MySQL network protocol and replication. Call for Committer/Maintainer Sorry that I have no enough time to maintai

Dec 28, 2022
Sync MySQL data into elasticsearch
Sync MySQL data into elasticsearch

go-mysql-elasticsearch is a service syncing your MySQL data into Elasticsearch automatically. It uses mysqldump to fetch the origin data at first, the

Dec 30, 2022
A high-performance MySQL proxy

kingshard 中文主页 Overview kingshard is a high-performance proxy for MySQL powered by Go. Just like other mysql proxies, you can use it to split the read

Dec 30, 2022
Golang MySql binary log replication listener

Go MySql binary log replication listener Pure Go Implementation of MySQL replication protocol. This allow you to receive event like insert, update, de

Oct 25, 2022
MySQL replication topology management and HA
MySQL replication topology management and HA

orchestrator [Documentation] orchestrator is a MySQL high availability and replication management tool, runs as a service and provides command line ac

Jan 4, 2023
Vitess is a database clustering system for horizontal scaling of MySQL.

Vitess Vitess is a database clustering system for horizontal scaling of MySQL through generalized sharding. By encapsulating shard-routing logic, Vite

Jan 3, 2023
db-recovery is a tool for recovering MySQL data.

db-recovery is a tool for recovering MySQL data. It is used in scenarios where the database has no backup or binlog. It can parse data files and redo/undo logs to recover data.

Nov 17, 2022
一个使 mysql,pgsql 数据库表自动生成 go struct 的工具

db2go 一个使 mysql、pgsql 数据库表自动生成 go struct 的工具 快速使用 将项目放入到GOPATH/src目录下

Nov 25, 2022
🐳 A most popular sql audit platform for mysql
🐳 A most popular sql audit platform for mysql

?? A most popular sql audit platform for mysql

Jan 6, 2023
Vitess is a database clustering system for horizontal scaling of MySQL.

Vitess Vitess is a database clustering system for horizontal scaling of MySQL through generalized sharding. By encapsulating shard-routing logic, Vite

Jan 4, 2023
GitHub's Online Schema Migrations for MySQL
GitHub's Online Schema Migrations for MySQL

gh-ost GitHub's online schema migration for MySQL gh-ost is a triggerless online schema migration solution for MySQL. It is testable and provides paus

Jan 4, 2023
Gaea is a mysql proxy, it's developed by xiaomi b2c-dev team.
Gaea is a mysql proxy, it's developed by xiaomi b2c-dev team.

简介 Gaea是小米中国区电商研发部研发的基于mysql协议的数据库中间件,目前在小米商城大陆和海外得到广泛使用,包括订单、社区、活动等多个业务。Gaea支持分库分表、sql路由、读写分离等基本特性,更多详细功能可以参照下面的功能列表。其中分库分表方案兼容了mycat和kingshard两个项目的路

Dec 30, 2022
Bifrost ---- 面向生产环境的 MySQL 同步到Redis,MongoDB,ClickHouse,MySQL等服务的异构中间件
Bifrost ---- 面向生产环境的 MySQL 同步到Redis,MongoDB,ClickHouse,MySQL等服务的异构中间件

Bifrost ---- 面向生产环境的 MySQL 同步到Redis,ClickHouse等服务的异构中间件 English 漫威里的彩虹桥可以将 雷神 送到 阿斯加德 和 地球 而这个 Bifrost 可以将 你 MySQL 里的数据 全量 , 实时的同步到 : Redis MongoDB Cl

Dec 30, 2022
go mysql driver, support distributed transaction

Go-MySQL-Driver A MySQL-Driver for Go's database/sql package Features Requirements Installation Usage DSN (Data Source Name) Password Protocol Address

Jul 23, 2022
A MySQL-compatible relational database with a storage agnostic query engine. Implemented in pure Go.

go-mysql-server go-mysql-server is a SQL engine which parses standard SQL (based on MySQL syntax) and executes queries on data sources of your choice.

Jan 2, 2023
Interactive client for PostgreSQL and MySQL
Interactive client for PostgreSQL and MySQL

dblab Interactive client for PostgreSQL and MySQL. Overview dblab is a fast and lightweight interactive terminal based UI application for PostgreSQL a

Jan 8, 2023