performance

  • Full-text search that did not need a search engine

    A search cluster running for one feature on 40,000 rows. The operational cost was larger than the feature it served.

  • A cgroup limit is not what /proc/meminfo says

    A container reads the host’s memory and CPU counts from /proc, because those files are not namespaced, and anything sizing itself from them sizes for the wrong machine.…

  • Exemplars link a metric to a trace

    A latency histogram tells you the 99th percentile is four seconds and cannot tell you which request that was, and an exemplar attaches a trace id to a…

  • A block theme is a directory of HTML files

    5.9 on 25 January, and templates/ replaces the template hierarchy. A theme with 41 PHP templates and an editor that cannot see any of them.

  • data_free, and the 80% of the file that is nothing

    InnoDB reuses freed space within a table and does not return it to the filesystem, so a table deleted from daily can be mostly empty and full size.…

  • Enums, and the string column that was pretending

    8.1 on 25 November, and the feature PHP had been simulating with class constants for a decade. A status column holding three spellings of the same thing.

  • Readonly properties and the value object that stops defending itself

    8.1, and a keyword that removes a getter per property. Forty value objects, each with private fields and public accessors that existed only to prevent writes.

  • preload is a startup cost you pay once per worker

    Preloading compiles and links classes into shared memory at startup, and the linking is what makes it different from opcache. The measured gain on a typical framework application…

  • posts_per_page => -1 is a promise you cannot keep

    An unbounded query works on the development database with four hundred rows and takes the site down at forty thousand. fields => ‘ids’ is the other half and…

  • A deterministic moduleId keeps the vendor hash still

    webpack 4 numbered modules in resolution order, so adding one import renumbered everything after it and changed the vendor chunk hash. Separating the runtime is the other half:…