# ESS Wisdom and Experience

**URL:** <https://the.fmsoup.org/t/ess-wisdom-and-experience/860>\
**Category:** Lounge (Discussions)\
**Tags:** ess\
**Created:** [April 3, 2020, 9:58pm UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860 "2020-04-03T21:58:38Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![steve\_ssh](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/steve_ssh/32/160_2.png) [@steve\_ssh](https://the.fmsoup.org/u/steve_ssh)\
**Post date:** [April 3, 2020, 9:58pm UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860/1 "2020-04-03T21:58:38Z")

</div>

Hello Everyone,

I am looking at a potential integration between a hosted FMP solution (FMS18, MacOS) and an Oracle DB (version TBD).

**Some background:**

The integration will not be writing to the Oracle DB; It is a read-only (from Oracle) situation.

The number of tables will be small -- perhaps two or three tables.

At this time, I do not have a sense of the number of records, or the rate of growth.

**Options that I am aware of:**

- Plug-in: MBS
- Plug-in: 360WorksJDBC
- The use of a microservice that can allow FMP/FMS to query via Insert From URL
- FileMaker ESS with the Import Records and Execute SQL script steps
- FileMaker ESS which allows for table occurrences on the relationship graph which shadow SQL tables

_I'd like for this post to be a dialog about these last two options, the ESS options._

- ESS feels like an old and somewhat marginalized technology.
- It also seems to have earned a reputation for not scaling well to large DB situations.

_If anyone can speak to experiences with using ESS, I'd like to invite you to weigh in with what you have learned about it._

--- I will start the ball rolling with lessons from my own experiences: ---

**My learned list of points for getting the best performance out of an ESS setup, all of which relate to TO's on the graph:**

- Strive to keep the structures flat.

- Strive to keep the relationships simple.

- Avoid _Refresh Window, flush cache external,_ as it means that records will have to be pulled down again that might have otherwise been available.

- Try to limit searching to Finds that match _exactly_ to key values.

- Avoid doing a basic Find in a text field without ==, because the SQL DB will be forced to return lots of records across the network so that FMP can then post-process them to do a FMP-style of matching.

- If find criteria must involve some kind of FMP-style string matching (ii.e not just "equals", but "contains", as well), look for a way to involve any other constraint that meets an exact criteria, do that find first -- then constrain using the more costly constraint. This is because ESS won't automatically make such considerations for optimizing the query, and so we must impose the optimization ourself.

- Using _Perform Script on Server_ is not necessarily the advantage that it normally is with non-ESS, because each request starts with a fresh/empty cache.

- When performing a find, enter Find mode before navigating to the target layout/context. We already have made a practice for this with regular FMP tables to prevent unnecessary downloading of record data, but apparently the overhead savings with ESS is far more dramatic.

**Credit:**

Credit for reviewing the above list, adding the point about entering Find mode before layout navigation, and being very generous with sharing his knowledge of ESS goes to a long-time FMP dev community contributor Lee Snover, who graciously shared his insights when I asked him about this topic. (Thank you!)

**One particular question that I have:**

Nearly all (if not all) of the above tips are geared towards requiring the least amount of data to transfer from the SQL source to FMP. I think that anyone who has worked in an ESS environment has probably had the experience where suddenly there is a dramatic slow-down while a large amount of table data is being downloaded from SQL to FMP. I'd like to think that by following the points above, that such experiences could be minimized.

It seems likely that there is a varied list of circumstances which will cause the ESS connection to refresh and result in a massive download of data. I'd be interested in learning any insights others have regarding whether some such refresh circumstances are beyond our control as developers, or whether they are mostly avoidable per tips such as the above.

**Lastly:**

Posting this request isn't to mean that I am sold on ESS, and am heading in that direction. This post is mostly because ESS feels like the biggest unknown of all the options that I have in front of me, and so if I can tap into the wisdom of everyone here, I stand a much better chance of seeing it clearly.

Thanks everyone -- especially long post, I know. Thanks for making it to the end.

-Steve

---

<div class="post-metadata">

**Author:** ![Malcolm](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/malcolm/32/196_2.png) [@Malcolm](https://the.fmsoup.org/u/Malcolm)\
**Post date:** [April 3, 2020, 10:47pm UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860/2 "2020-04-03T22:47:12Z")

</div>

The one thing that I can add is that we found the greatest improvement came when we asked the SQL DB admins to provide us with VIEWS that corresponded to our needs. It wasn't too much work for them and at our end, we implemented those views in the same way we use different TOs.

---

<div class="post-metadata">

**Author:** ![Bobino](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/bobino/32/194_2.png) [@Bobino](https://the.fmsoup.org/u/Bobino)\
**Post date:** [April 4, 2020, 4:50am UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860/3 "2020-04-04T04:50:37Z")

</div>

Your original recap is great in itself.

FileMaker won't have indexes for that data, so be mindful if you need to do things involving stuff like data-driven value lists. You said it will be read only, so validations (uniqueness) won't be a problem. Relationships will work, but as you pointed out, the query translation can keep you waiting. Also, you won't be able to add global fields to that table (only unstored calcs and summary fields).

If you do implement it and have some optimization to do, I believe there is a way to obtain the translated queries FileMaker will be sending to SQL, but I forgot how this can be done (what 3rd party tool / required config). Not that it would let you change what gets used, but by seeing the resulting query, it makes it easier to understand how it performs (or lags), letting you seek alternatives that result in better performing translations.

HTH

---

<div class="post-metadata">

**Author:** ![harvest](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/harvest/32/231_2.png) [@harvest](https://the.fmsoup.org/u/harvest)\
**Post date:** [April 4, 2020, 4:16pm UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860/4 "2020-04-04T16:16:29Z")

</div>

Hi Steve,

in one of my longtime projects I integrated different SQL-Server Sources into the FM Solution.

The slowest was ESS via Web/internet to MySQL, both servers were located in Germany but the bottleneck allways seemed to be poor network performance and a bad gateway. The solution does read and write but ODBC isn't the fastest technology. Tables have a max of 90 columns and about 50.000 rows.

Next was ESS to MSSQL on the local network, 30 different tables, 5 to 20 columns, 10 to 6.000.000 rows, the ESS is used for reading, writing is done via API-HTTP with MBS. Performance for reading is good, we don't do much searching, everything is navigated via relationsship. That is fast, even with big tables, no waiting, feels like working on the FM Server itself. Of course local network is gigabit etc.

Next interacting with Gira. Since we didn't get a connect to the local SQL-Server, we first tried interfacing with Gira via API but that was dead slow. Gira doesn't allow any HTTP batch, every write had to be done in a single API call. I proposed doing sync between the FM-System and Gira via a server in the middle. IT has set up a MSSQL server on a third machine. We read and write to that server again with MBS, doing MD5-hashes and timestamps to minimize traffic and have a live sync every 5 min keeping 10th of thousand of rows updated. Usally sync runs in 30 to 50 secs. What happens on the Gira side I don't know but for us it freed performance.

To summarize: in my experience ESS can be OK if network connection is fast enough. When you have to do a lot of searches that may change. I found performance of FMSql on ESS to be poor. MBS-Sql is a bit faster. FM searches often are the fastest in my setup of ESS. So I avoid searches on ESS shadow tables and try to do most of the work with relations. That fills the graph but I gain speed that way.

2 Cents from Holger

---

<div class="post-metadata">

**Author:** ![steve\_ssh](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/steve_ssh/32/160_2.png) [@steve\_ssh](https://the.fmsoup.org/u/steve_ssh)\
**Post date:** [April 4, 2020, 6:11pm UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860/5 "2020-04-04T18:11:29Z")

</div>

Just a note to say thank you to @Malcolm, @Bobino, @harvest for contributing to this thread. Each of you has either given me some new info that I wasn't aware of, or reminded me of something that I had forgotten.

@harvest : The information about each of your three experiences are really helpful to me. Thanks for taking the time to write out those details as you did. I really appreciate that.

Thanks to each of you for the valuable input here. It is going to help me out.

---

<div class="post-metadata">

**Author:** ![Bobino](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/bobino/32/194_2.png) [@Bobino](https://the.fmsoup.org/u/Bobino)\
**Post date:** [April 4, 2020, 10:20pm UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860/6 "2020-04-04T22:20:24Z")

</div>

Also, from your original post, one more alternative may be using MirrorSync to sync FM & SQL. I've never done it, but from recollection it is part of their feature set.

---

<div class="post-metadata">

**Author:** ![Cecile](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/cecile/32/98_2.png) [@Cecile](https://the.fmsoup.org/u/Cecile)\
**Post date:** [April 5, 2020, 12:21am UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860/7 "2020-04-05T00:21:36Z")

</div>

What is ESS?

---

<div class="post-metadata">

**Author:** ![planteg](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/planteg/32/627_2.png) [@planteg](https://the.fmsoup.org/u/planteg)\
**Post date:** [April 5, 2020, 3:25am UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860/8 "2020-04-05T03:25:50Z")

</div>

External SQL Source. Some Database Engines like Oracle and MS SQL are sources for FileMaker. One may event add a TO to tables in such a database.

---

<div class="post-metadata">

**Author:** ![steve\_ssh](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/steve_ssh/32/160_2.png) [@steve\_ssh](https://the.fmsoup.org/u/steve_ssh)\
**Post date:** [April 5, 2020, 4:00am UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860/9 "2020-04-05T04:00:46Z")

</div>

Hi All,

Just a note that I found the following document to be a great clarification/reinforcement for a lot of the concepts that were on my mind when I started this thread:

[ESS Hinter den Kulissen (ESS Under the Hood) - 2010](https://www.filemaker-konferenz.com/2010/downloads/28.%20Mai%20Freitag/ESS%20Under%20the%20Hood/FMK%202010%20FileMaker%20ESS%20Hinter%20den%20Kulissen%20ESS%20Under%20the%20Hood%20by%20Galt%20Johnson.pdf)

Though it is an old document, I nonetheless believe that most of the information it contains is still very relevant to ESS.

Enjoy!

---

<div class="post-metadata">

**Author:** ![steve\_ssh](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/steve_ssh/32/160_2.png) [@steve\_ssh](https://the.fmsoup.org/u/steve_ssh)\
**Post date:** [April 5, 2020, 4:11am UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860/10 "2020-04-05T04:11:00Z")

</div>

Hi @Cecile,

This page has a few videos on the topic of ESS:

- [https://www.filemaker.com/learning/custom-app-academy/205/external-sql-sources-(ess)](https://www.filemaker.com/learning/custom-app-academy/205/external-sql-sources-(ess))

The first video on the page (around 5 minutes long) gives a high-level overview of scenarios that ESS was designed to address.

HTH,

-Steve

---

<div class="post-metadata">

**Author:** ![steve\_ssh](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/steve_ssh/32/160_2.png) [@steve\_ssh](https://the.fmsoup.org/u/steve_ssh)\
**Post date:** [April 5, 2020, 4:11am UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860/11 "2020-04-05T04:11:37Z")

</div>

> Also, from your original post, one more alternative may be using MirrorSync to sync FM & SQL. I've never done it, but from recollection it is part of their feature set.

Excellent point / addition. Thank you, @Bobino.

---

<div class="post-metadata">

**Author:** ![WimDecorte](https://avatars.discourse-cdn.com/v4/letter/w/b19c9b/32.png) [@WimDecorte](https://the.fmsoup.org/u/WimDecorte)\
**Post date:** [April 5, 2020, 11:17am UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860/12 "2020-04-05T11:17:37Z")

</div>

> [@steve\_ssh](#):
>
> - FileMaker ESS with the Import Records and Execute SQL script steps
> - FileMaker ESS which allows for table occurrences on the relationship graph which shadow SQL tables

One point of clarification that is important for project dependencies:  
The "import" and "execute sql" script steps work with any ODBC source without restrictions, and is not strictly called ESS.

ESS is where those SQL source tables are treated as native FM tables and to make this feature work there is a much narrow band of combinations of FM version, ODBC driver version and backend source version. Each version of FM has its own set of supported things; and straying outside that supported space has almost immediate consequences in my experience. And that is an important dependency to manage: the back-end database can not be upgrade, the ODBC drivers cannot be upgraded and FM cannot be upgraded unless that whole dependency is resolved as a unit.

The single biggest thing that has plagued some of our busiest ESS deployments are ghost sessions where user sessions that involve ESS interactions get interrupted (with FM Go that is more an issue than with WebD or FMP) then the server for some reason cannot disconnect that session.

Of the available options I would pick either working through ODBC with the "import" and "execute sql" script steps or through the other system's APIs.

Our relationship with the various sync products has been a rocky road. While we don't avoid them at all cost, we also don't see them as 'easy solutions', We always underestimate the time it takes to deploy and troubleshoot them so now we treat them as a project risk.

---

<div class="post-metadata">

**Author:** ![AndyHibbs](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/andyhibbs/32/3089_2.png) [@AndyHibbs](https://the.fmsoup.org/u/AndyHibbs)\
**Post date:** [April 5, 2020, 1:52pm UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860/13 "2020-04-05T13:52:49Z")

</div>

We have systems using ESS to MySQL databases (we wouldn’t do this now), our experience is that ExecuteSQL is very slow using ESS tables despite both databases behind cloud based and ExecuteSQL being called by a FileMaker scheduled script.

---

<div class="post-metadata">

**Author:** ![harvest](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/harvest/32/231_2.png) [@harvest](https://the.fmsoup.org/u/harvest)\
**Post date:** [April 5, 2020, 3:41pm UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860/14 "2020-04-05T15:41:34Z")

</div>

> [@WimDecorte](#):
>
> The single biggest thing that has plagued some of our busiest ESS deployments are ghost sessions where user sessions that involve ESS interactions get interrupted (with FM Go that is more an issue than with WebD or FMP) then the server for some reason cannot disconnect that session.

I remember this stuff happening here too. We sometimes had to restart the FM server because for some reason the broken or interrupted ODBC connection brought down the ability to reconnect to the ESS source the next time and that limited the servers script engine bringing it to a stand still.

---

<div class="post-metadata">

**Author:** ![steve\_ssh](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/steve_ssh/32/160_2.png) [@steve\_ssh](https://the.fmsoup.org/u/steve_ssh)\
**Post date:** [April 5, 2020, 4:29pm UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860/15 "2020-04-05T16:29:51Z")

</div>

@WimDecorte: Thank you for weighing in on this.

**Some of my takeaways:**

- The ghost sessions
- The strict limitations w.r.t. managing versions of three separate pieces that must agree in order to work (DataSource, Driver, FMP)
- Your view of these various technologies based on what, I am sure, is immense experience
- The correction about the nomenclature of "ESS", and what that specifically refers to\*\*

Thank you for all of this. Very appreciated.

-steve

\*\* I had long thought that ESS just refers to the feature where one winds up adding Table Occurrences to the graph that are based on an ODBC source (and not to the Import Records or Execute SQL script steps). When I went to draft this post, I researched a bit, and among other things, wanted to check if I had the nomenclature correct. I think that I probably mis-interpreted some of what I read at [this documentation](https://fmhelp.filemaker.com/help/18/fmp/en/#page/FMP_Help%2Fexternal-data-sources.html%23) when I concluded that I had it wrong. Nice to have this corrected (again) -- thank you.

---

<div class="post-metadata">

**Author:** ![steve\_ssh](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/steve_ssh/32/160_2.png) [@steve\_ssh](https://the.fmsoup.org/u/steve_ssh)\
**Post date:** [April 5, 2020, 4:31pm UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860/16 "2020-04-05T16:31:45Z")

</div>

Thanks for this, @AndyHibbs

---

<div class="post-metadata">

**Author:** ![FileKraft](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/filekraft/32/1183_2.png) [@FileKraft](https://the.fmsoup.org/u/FileKraft)\
**Post date:** [April 5, 2020, 7:29pm UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860/17 "2020-04-05T19:29:39Z")

</div>

Andy please specify if you are referring to Execute SQL script step or ExectueSQL function. In regards of latter - adding FIRST and OFFSET clauses apparently were introduced to improve ESS data retrieval if I remember correctly?

---

<div class="post-metadata">

**Author:** ![jwilling](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/jwilling/32/256_2.png) [@jwilling](https://the.fmsoup.org/u/jwilling)\
**Post date:** [April 6, 2020, 12:48am UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860/18 "2020-04-06T00:48:31Z")

</div>

A client of mine recently wanted to see if connecting via ESS to a MSSQL table was feasible. The performance, even for simple queries, was a letdown. If you have a fully-populated ESS table and can do a quick test, then it's worth it to see if ESS is acceptable, but my bet is that you'll be much happier using an ODBC import or writing an API to interact with the external data.

---

<div class="post-metadata">

**Author:** ![AndyHibbs](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/andyhibbs/32/3089_2.png) [@AndyHibbs](https://the.fmsoup.org/u/AndyHibbs)\
**Post date:** [April 6, 2020, 3:36pm UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860/19 "2020-04-06T15:36:44Z")

</div>

Sorry for the delay, we’re flat out here at the moment.

It was ExecuteSQL function.

All the best  
Andy

---

<div class="post-metadata">

**Author:** ![FileKraft](https://yyz2.discourse-cdn.com/flex030/user_avatar/the.fmsoup.org/filekraft/32/1183_2.png) [@FileKraft](https://the.fmsoup.org/u/FileKraft)\
**Post date:** [April 6, 2020, 11:30pm UTC](https://the.fmsoup.org/t/ess-wisdom-and-experience/860/20 "2020-04-06T23:30:53Z")

</div>

Thank you, any instances of OFFSET or FETCH FIRST used in conjunction with ESS and ExecuteSQL function?

[Next page](https://the.fmsoup.org/t/ess-wisdom-and-experience/860.md?page=2)
