Percona Resources

Software
Downloads

All of Percona’s open source software products, in one place, to download as much or as little as you need.

Valkey Contribution

Product Documentation

Why Percona for MongoDB?

Why Percona for PostgreSQL?

Percona Blog

Percona Blog

Our popular knowledge center for all Percona products and all related topics.

Community

Percona Community Hub

A place to stay in touch with the open-source community

Events

Percona Events Hub

See all of Percona’s upcoming events and view materials like webinars and forums from past events

About

About Percona

Percona is an open source database software, support, and services company that helps make databases and applications run better.

Percona in the News

See Percona’s recent news coverage, press releases and industry recognition for our open source software and support.

Our Customers

Our Partners

Careers

Contact Us

Alexander Rubin
Alexander joined Percona in 2013. Alexander worked with MySQL since 2000 as DBA and Application Developer. Before joining Percona he was doing MySQL consulting as a principal consultant for over 7 years (started with MySQL AB in 2006, then Sun Microsystems and then Oracle). He has helped many customers design large, scalable and highly available MySQL systems and optimize MySQL performance. Alexander has also helped customers design Big Data stores with Apache Hadoop and related technologies.

Non-Deterministic Order for SELECT with LIMIT

In this blog, we’ll look at how queries in systems with parallel processing can return rows in a non-deterministic order (and how to fix it). Short story: Do not rely on the order of your rows if your query does not use ORDER BY. Even with ORDER BY, rows with the same values can be sorted differently. To fix this […]

ClickHouse: New Open Source Columnar Database

For this blog post, I’ve decided to try ClickHouse: an open source column-oriented database management system developed by Yandex (it currently powers Yandex.Metrica, the world’s second-largest web analytics platform). In my previous set of posts, I tested Apache Spark for big data analysis and used Wikipedia page statistics as a data source. I’ve used the same data as […]

MySQL 8.0: Descending Indexes Can Speed Up Your Queries

In this blog, we’ll discuss descending indexes in MySQL 8.0. Summary The future MySQL 8.0 will (probably) have a great new feature: support for index sort order on disk (i.e., indexes can be physically sorted in descending order). In the MySQL 8.0 Labs release (new optimizer preview), when you create an index you can specify the […]

Upgrading to MySQL 5.7? Beware of the new STRICT mode

This blog post discusses the ramifications of STRICT mode in MySQL 5.7. In short By default, MySQL 5.7 is much “stricter” than older versions of MySQL. That can make your application fail. To temporarily fix this, change the SQL_MODE to NO_ENGINE_SUBSTITUTION (same as in MySQL 5.6):

MySQL 5.7, dates and default values The default SQL_MODE in MySQL 5.7 […]

MySQL 5.7 Performance Tuning After Installation

This blog updates Stephane Combaudon’s blog on MySQL performance tuning and covers MySQL 5.7 performance tuning immediately after installation. A few years ago, Stephane Combaudon wrote a blog post on Ten MySQL performance tuning settings after installation that covers the (now) older versions of MySQL: 5.1, 5.5 and 5.6. In this post, I will look into […]

MySQL 8.0 General Tablespaces: File per Database (and no FRM files)

In this blog post, we’ll look at MySQL 8.0 general tablespaces. Introduction MySQL 8.0 (the DMR version is available now) has two great features (among others): The new data dictionary completely removed *.frm files, which is great The ability to create a tablespace and assign a group of tables to it (originally introduced in 5.7). […]

MySQL CDC, Streaming Binary Logs, and Asynchronous Triggers

In this post, we’ll look at MySQL CDC, streaming binary logs and asynchronous triggers. What is Change Data Capture and why do we need it? Change Data Capture (CDC) tracks data changes (usually close to realtime). In MySQL, the easiest and probably most efficient way to track data changes is to use binary logs. However, […]

How Apache Spark makes your slow MySQL queries 10x faster

In this blog post, we’ll discuss how to improve the performance of slow MySQL queries using Apache Spark. In my previous blog post, I wrote about using Apache Spark with MySQL for data analysis and showed how to transform and analyze a large volume of data (text files) with Apache Spark. Vadim also performed a […]

Pipelining versus Parallel Query Execution with MySQL 5.7 X Plugin

In this blog post, we’ll look at pipelining versus parallel query execution when using X Plugin for MySQL 5.7. In my previous blog post, I showed how to use X Plugin for MySQL 5.7 for parallel query execution. The tricks I used to make it work: Partitioning by hash Open N connections to MySQL, where N = number […]

How MySQL 5.7 Handles UTF8MB4 and the Load Data infile

In this post, I’ll discuss how MySQL 5.7 handles UTF8MB4 and the load data infile. Many of my clients have told me that they do not like using the LOAD DATA INFILE statement and prefer to manually parse and load the data. The main reason they do it are issues with the character sets, specifically […]

Migrate from MS SQL Server to MySQL

In this blog series, I will share my experiences as I migrate commercial databases (i.e., Microsoft SQL or Oracle) to open source (MySQL). More specifically, we will look at how you can migrate from MS SQL Server to MySQL. For this first blog post I’ve chosen Jira database as an example, and used three different tools to […]

Using MySQL 5.7 Document Store with Internet of Things (IoT)

In this blog post, I’ll discuss how to use MySQL 5.7 Document Store to track data from Internet of Things (IoT) devices. Using JSON in MySQL 5.7 In my previous blog post, I’ve looked into MySQL 5.7.12 Document Store. This is a brand new feature in MySQL 5.7, and many people are asking when do I […]

MongoDB Administration Checklist for MySQL DBAs

In this blog, I discuss a MongoDB administration checklist designed to help MySQL DBAs. If you are MySQL DBA, starting MongoDB administration is not always an easy transition. Although most of the concepts and even implementation are similar, the commands are different. The following table outlines the typical MySQL concepts and DBA tasks (on the […]

Asynchronous Query Execution with MySQL 5.7 X Plugin

In this blog, we will discuss MySQL 5.7 asynchronous query execution using the X Plugin. Overview MySQL 5.7 supports X Plugin / X Protocol, which allows (if the library supports it) asynchronous query execution. In 2014, I published a blog on how to increase a slow query performance with the parallel query execution. There, I created a prototype […]

Looking inside the MySQL 5.7 document store

In this blog, we’ll look at the MySQL 5.7 document store feature, and how it is implemented. Document Store MySQL 5.7.12 is a major new release, as it contains quite a number of new features: Document store and “MongoDB” like NoSQL interface to JSON storage Protocol X / X Plugin, which can be used for asynchronous […]

MySQL Data at Rest Encryption

This blog post will discuss the issues and solutions for MySQL Data at Rest encryption. There is an update, too, by my colleague Ceri Williams – you can check it out here. Data at Rest Encryption is not only a good-to-have feature, but it is also a requirement for HIPAA, PCI, and other regulations. There are […]

Fixing MySQL Bug#2: now MySQL makes toast!

Historical MySQL Bug#2, opened 12 Sep 2002, states that MySQL Connector/J doesn’t make toast. It hasn’t been fixed for more than 14 years. I’ve finally created a patch for it. First of all: why only fix this for MySQL Connector/J? We should make sure the server can do this for any implementation! With this fix, now […]