atuinsh/atuin

[Bug]: Non-interactive search with limit=1 much slower when query is empty

Opened this issue · 0 comments

What did you expect to happen?

I wanted to use https://gist.github.com/tyalie/7e13cfe2ec62d99fa341a07ed12ef7c0 (from #798) and I noticed that searching is sometimes very slow for me (250 ms which is very noticeable when using up-arrow to cycle through history). This happens when query is empty. With an initial query string, even a single letter, it is much faster (30ms).

What happened?

I compared the time for atuin search invocations:

time atuin search --filter-mode global --search-mode prefix --limit 1 --offset 1 --cmd-only 'w'
0.02s user 0.01s system 94% cpu 0.031 total
time atuin search --filter-mode global --search-mode prefix --limit 1 --offset 1 --cmd-only
0.15s user 0.09s system 97% cpu 0.250 total

I tried to debug the SQL query used but I couldn't find any way to log it. I tried running with strace -f atuin search ..., while I didn't see much interesting stuff, the output length (number of system calls) is drastically different, compare:

> wc -l /tmp/out-with-query /tmp/out-no-query
     4393 /tmp/out-with-query
   109741 /tmp/out-no-query

I would expect to see somewhat similar time as I am only trying to search with --limit 1 and small offset, so that should be pretty fast.

Just for reference, atuin stats shows me Total commands: 240675.

Atuin doctor output

{
  "atuin": {
    "version": "18.3.0",
    "sync": {
      "cloud": true,
      "records": true,
      "auto_sync": true,
      "last_sync": "2024-08-21 7:34:41.277072878 +00:00:00"
    },
    "sqlite_version": "3.44.0"
  },
  "shell": {
    "name": "zsh",
    "default": "zsh",
    "plugins": [
      "atuin"
    ],
    "preexec": "built-in"
  },
  "system": {
    "os": "Arch Linux",
    "arch": "x86_64",
    "version": "rolling",
    "disks": [
      {
        "name": "/dev/nvme0n1p2",
        "filesystem": "ext4"
      },
      {
        "name": "/dev/nvme0n1p1",
        "filesystem": "vfat"
      },
      {
        "name": "/dev/sdb1",
        "filesystem": "ext4"
      },
      {
        "name": "/dev/sdb1",
        "filesystem": "ext4"
      },
      {
        "name": "/dev/sdb1",
        "filesystem": "ext4"
      }
    ]
  }
}

Code of Conduct

  • I agree to follow this project's Code of Conduct