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

Vadim Tkachenko
Vadim Tkachenko co-founded Percona in 2006 and serves as its Chief Technology Officer. Vadim leads Percona Labs, which focuses on technology research and performance evaluations of Percona’s and third-party products. Vadim’s expertise in LAMP performance and multi-threaded programming help optimize MySQL and InnoDB internals to take full advantage of modern hardware. He also co-authored the book High Performance MySQL: Optimization, Backups, and Replication 3rd Edition.

Redundant index is not always bad

About year ago Peter wrote about redundant indexes and mentioned sometimes it is good to leave two indexes, even one is first part of another. I’m speaking about BTREE indexes, for example, KEY (A), and KEY (A,B). From SQL point of view KEY(A) is not needed, as for queries like WHERE A=5 the index (A,B) […]

Memory allocation in Stored Function

UPDATE : Post is not actual anymore Not so long time ago I had task to update string column in table with 10mil+ rows, and, as the manipulation was non-trivial, I decided this task is good to try Stored Function. Function written – go ahead. Since 5 min I got totally frozen box with no […]

MySQL Community contrubutions

I’ve just read post http://www.planetmysql.org/kaj/?p=123 about MySQL plans of including community contributions into releases. I understand MySQL’s interest to make releases stable, and includes contributions only into development tree, but this is not something I would like to see. Look, MySQL 5.0 was shipped as production on 19 October 2005. Since almost 2 years there […]

Query_cache and column level privileges

Recently we were puzzled by question how query_cache works with column level privileges. The question was appeared as we discovered function query_cache_send_result_to_client is called before real parsing of query, so at the moment of execution the query_cache is not able to know which columns are accessed. Looking into source code I found out that in […]

Microslow patch for 5.0.37

Just short message that patch enables microsecond resolution in slow-log (see more https://www.percona.com/blog/2006/09/06/slow-query-log-analyzes-tools/) for 5.0.37 is available here: www.percona.com/blog/files/patches/patch.slow-micro.5.0.37.diff The patch for 5.0.41 : www.percona.com/blog/files/patches/patch.slow-micro.5.0.41.diff

Countless storage engines

Today everybody writes about MySQL Conference & Expo and I am not an exclusion. I am under impression of count of storage engines were presented. In good old time when Oracle bought InnoDB, MySQL did one step – announced MySQL supports Plugginable Storage Architecture. In that time nobody was able to predict what is the […]

PBXT benchmarks

The PBXT Storage Engine (http://www.primebase.com/xt/) is getting stable and we decided to benchmark it in different workloads. This time I tested only READ queries, similar to ones in benchmark InnoDB vs MyISAM vs Falcon (https://www.percona.com/blog/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1) The difference is I used new sysbench with Lua scripting language, so all queries were scripted for sysbench.

Pitfalls of converting to InnoDB

We often recommend to our clients to convert their current database from MyISAM tables to InnoDB. The transfer by itself in most cases is almost plain, however the application can be broken by new unexpected errors 1205 (ER_LOCK_WAIT_TIMEOUT) Lock wait timeout expired. Transaction was rolled back. 1213 (ER_LOCK_DEADLOCK) Transaction deadlock. You should rerun the transaction.

Binaries of MySQL 5.0.33 Community release for AMD64 / EM64T

Update 3 June 2008: We have removed the builds below, since they are quite obsolete and no one has posted comments about them since more than a year ago. Great news are MySQL finally released new Community release – MySQL 5.0.33, which however as promised comes without Binaries. This version also does not have any […]

MySQL sources from development tree

I just want to write few tips how to get MySQL from development BitKeeper tree, as there are several tricks. First of all you need a fresh free client – bk-client2.0 http://www.bitkeeper.com/Hosted.Downloading.html . Once you get it, you can clone latest tree: bkf clone bk://mysql.bkbits.net/mysql-5.0 mysql-5.0 New client supports “changes” command, so you can look […]

InnoDB vs MyISAM vs Falcon benchmarks – part 1

Several days ago MySQL AB made new storage engine Falcon available for wide auditory. We cannot miss this event and executed several benchmarks to see how Falcon performs in comparison to InnoDB and MyISAM. The second goal of benchmark was a popular myth that MyISAM is faster than InnoDB in reads, as InnoDB is transactional, […]

InnoDB benchmarks

There was several changes in InnoDB to fix scalabilty problems, so I ran benchmark to check new results and also compare overall performance of InnoDB in 5.0 and 5.1 before and after fixes. Problems in InnoDB that were fixed: Thread trashing issues with count of theads 100+. In this case performance of InnoDB degraded dramatically. […]

Bug fix of InnoDB scalability problem

I was pretty busy last month with project which will be annonced very soon (I hope), but I can’t miss bug fix of my favorite bug 15815. I wrote about this problem before and also investigated in my presentation. Finally bug fix was pushed into 5.0-bk tree and now I have it in my hands. […]

Backport of micro-time patch to mysql 4.1

Taking into account 4.1 tree is still popular and is used on many production servers we decided to make backport of patch to slow-log queries. The patch allows to specify time of slow queries in microseconds and is very helpful in a fight with problematic queries. 4.1 Patch is available here (The original patch was […]

Test Drive of Solid

Not so long ago Solid released solidDB for MySQL Beta 3 so I decided now is time to take a bit closer look on new transactional engine for MySQL. While my far goal is the performance and scalability testing before I wanted to look at basic transactional properties such as deadlock detection, select for update […]

Alternatives of PHP ?

When I loaded GigaBytes of XMLs into mysql database with PHP script, I was thinking about PHP alternatives. Why do I need that ? 1. PHP is slow – I’m speaking about area of data processing and implementation of algorithms 2. No good cli debugger – I’m just tired of debugging with ‘echo’ and ‘var_dump’ […]

Internals of InnoDB mutexes

InnoDB uses its own mutexes and read-write locks instead of POSIX-mutexes pthread_mutex*, the main reason for that is performance, but InnoDB’s implementation isn’t ideal and on modern SMP boxes can cause serious performance problems. Let’s look on InnoDB mutex (schematic for simplification):

Joining Peter for MySQL Consulting

Starting September I’m leaving MySQL to partner with Peter on practice as well as work with him on some Web projects. I really enjoyed working under Peter’s guidance while working for MySQL and it is great we now can work together as a partners. I thanks MySQL for two great years I had. I also […]

GROUP_CONCAT useful GROUP BY extension

(There is an updated version of this post here) MySQL has useful extention to the GROUP BY operation: function GROUP_CONCAT: GROUP_CONCAT(expr) – This function returns a string result with the concatenated non-NULL values from a group. Where it can be useful?

MySQL wins C’T Database Contest

Today MySQL published the press release with results of Database Contest (results on German available here http://www.mysql.de/ct-dbcontest). Peter and me spent quite some time working on this project while being employed by MySQL and it is great to see results finally publicly available. The story began about year ago when C’T magazine had called for […]